python:numpy学习

1.numpy属性

array=np.array([[1,2,3],[2,3,4]])#使用numpy.array来创建数组
print("type ",type(array))
print(array)
print('number of dim',array.ndim)#ndarray.ndim 数组的维度
print("shape",array.shape)#ndarray.shape返回一个包含数组维度的元组,它也可以用于调整数组大小。
print('size',array.size)#总共有多少个元素

2.创建数组
有好几种创建数组的方法。
例如,你可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。

a=np.array([1,2,3],dtype=np.int32)#创建了一维数组
b=np.array([[1,3,4],[3,45.5,6]])#创建了二维数组
print(a)
print(a.dtype)
print(b)
print(b.dtype)
#输出
[1 2 3]
int32
[[ 1.   3.   4. ]
 [ 3.  45.5  6. ]]
float64


#dtype定义了数据类型
NumPy中的基本数据类型 名称    描述
bool    用一个字节存储的布尔类型(True或False)
inti    由所在平台决定其大小的整数(一般为int32或int64)
int8    一个字节大小,-128127
int16   整数,-3276832767
int32   整数,-2 ** 312 ** 32 -1
int64   整数,-2 ** 632 ** 63 - 1
uint8   无符号整数,0255
uint16  无符号整数,065535
uint32  无符号整数,02 ** 32 - 1
uint64  无符号整数,02 ** 64 - 1
float16     半精度浮点数:16位,正负号1位,指数5位,精度10位
float32     单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float   双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64   复数,分别用两个32位浮点数表示实部和虚部
complex128或complex  复数,分别用两个64位浮点数表示实部和虚部

创建一个全部为0的矩阵 numpy.zeros()

a=np.zeros((3,4))#创建了一个三行四列的矩阵
print(a)
#输出
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

创造全部为1的矩阵 numpy.ones()

a=np.ones((3,4),dtype=np.int16)#创建了一个三行四列的矩阵
print(a)
输出
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

生成随机矩阵 numpy.empty()

a=np.empty((3,4))#生成随机矩阵
print(a)
#输出
[[6.23042070e-307 7.56587584e-307 1.37961302e-306 6.23053614e-307]
 [6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307]
 [1.86921143e-306 6.23061763e-307 8.90104239e-307 1.11253693e-306]]

生成有序的矩阵 numpy.arange()

a = np.arange(12, 14)
b = np.arange(12).reshape((3, 4))#重新调整了数组的维度,注意要有()
print(a)
print(b)
#输出
[12 13]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

生成一个等差数列 numpy.linspace()

a=np.linspace(1,10,6)#常看到的一般是三个参数,分别是:起始值、终止值(默认包含自身)、数列个数
b=a.reshape((2,3))
print(a)
print(b)
#输出
[ 1.   2.8  4.6  6.4  8.2 10. ]
[[ 1.   2.8  4.6]
 [ 6.4  8.2 10. ]]

3.基础运算
数组的运算

a = np.array([10, 11, 12, 13])
b = np.arange(4)
c = a - b  # 减法
d = a + b  # 加法
e = a * b  # 乘法
f = b ** 2  # 平方
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
#输出
[10 11 12 13]
[0 1 2 3]
[10 10 10 10]#-
[10 12 14 16]#+
[ 0 11 24 39]#*
[0 1 4 9]#**2

三角函数的运算
np.sin()……

a = np.array([10, 11, 12, 13])
b = 10 * np.sin(a)
c = 10 * np.cos(a)
print(a)
print(b)
print(c)
#输出
[10 11 12 13]
[-5.44021111 -9.99990207 -5.36572918  4.20167037]#sin
[-8.39071529  0.04425698  8.43853959  9.07446781]#cos

数组中的值的比较

a = np.array([10, 11, 12, 13])
print(a < 12)
print(a == 13)
#输出
[ True  True False False]
[False False False  True]

矩阵的运算
np.dot()

a = np.array([[1,1],[1,0]])
b=np.arange(4).reshape((2,2))
c=np.dot(a,b)#矩阵的乘法
print(a)
print(b)
print(c)
#输出
[[1 1]#a
 [1 0]]
[[0 1]#b
 [2 3]]
[[2 4]#c
 [0 1]]

求最大值(np.max())、最小值(np.min())、求和(np.sum())

a = np.random.random((2, 4))  # 生成一个24列的随机数组每个数值[0.0, 1.0)
print(a)
print(np.sum(a))#求和
print(np.min(a))#最小值
print(np.max(a))#最大值

#输出
[[0.7629701  0.98383964 0.14707335 0.47315195]
 [0.86016093 0.30829918 0.18056867 0.82868108]]
4.54474490746057#求和
0.14707335220307682#最小值
0.9838396398528461#最大值

添加上axis
当axis=1时 在每一行操作
当axis=0时 在每一列操作

a = np.random.random((2, 4)) # 生成一个2行4列的随机数组每个数值[0.0, 1.0)

a = np.random.random((2, 4))  # 生成一个24列的随机数组每个数值[0.0, 1.0)
print(a)
print(np.sum(a,axis=1))#求和
print(np.min(a,axis=0))#最小值
print(np.max(a,axis=1))#最大值
#输出
[[0.66119035 0.46815043 0.30343994 0.52637789]
 [0.00968897 0.0638045  0.25099375 0.57531702]]
[1.9591586  0.89980425]
[0.00968897 0.0638045  0.25099375 0.52637789]
0.6611903483952365

其他的一些运算

import numpy as np

a = np.arange(2, 14).reshape((3, 4))
b = np.arange(14, 2, -1).reshape((3, 4))
print(a)
print(b)
print(np.argmax(a))  # 最大值的索引
print(np.argmin(a))  # 最小值的索引
print(np.mean(a))  # 输出平均值
print(np.average(a))  # 也是计算平均值
print(np.median(a))  # 计算中位数
print(np.cumsum(a))  # 累加,计算前n个值的和
print(np.diff(a))  # 每两个数之间的差
print(np.sort(b))  # 进行排序,逐行进行排序
print(np.transpose(a))  # 矩阵的转置
print(np.clip(a, 5, 9))  # 所有<5的数就等于5,所有大于9的数就等于就9,其他保留
#输出
[[ 2  3  4  5]#a
 [ 6  7  8  9]
 [10 11 12 13]]
[[[14 13 12 11]#b
 [10  9  8  7]
 [ 6  5  4  3]]
11              # 最大值的索引
0               # 最小值的索引
7.5             # 输出平均值
7.5             # 也是计算平均值
7.5             # 计算中位数
[ 2  5  9 14 20 27 35 44 54 65 77 90]# 累加,计算前n个值的和
[[1 1 1]            # 每两个数之间的差
 [1 1 1]
 [1 1 1]]
[[11 12 13 14]          # 进行排序,逐行进行排序
 [ 7  8  9 10]
 [ 3  4  5  6]]
[[ 2  6 10]          # 矩阵的转置
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[5 5 5 5]          # 所有<5的数就等于5,所有大于9的数就等于就9,其他保留
 [6 7 8 9]
 [9 9 9 9]]

4.numpy的索引

import numpy as np

b=np.arange(3,15).reshape((3,4))
print(b)
print(b[2])
#两种不同的表达方式
print(b[2][2])
print(b[2,2])
#第二行所有的数
print(b[2,:])
#第一列所有的数
print(b[:,1])
#第一行第一列到第三列的值,这里的1,3是指数组中的1,3
print(b[1,1:3])#数组列数1,2
#迭代每一行
for row in b:
    print(row)
#迭代每一列
for column in np.transpose(b):#先将矩阵转置,然后再迭代每一行,那么就相当于迭代了每一列
    print(column)
#迭代每一列的另一种方式
for column2 in b.T:
    print(column2)
#迭代每一个项目
print(b.flatten())
for item in b.flatten():
    print(item,end=' ')

#输出
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]

[11 12 13 14]
13
13

[11 12 13 14]

[ 4  8 12]

[8 9]
#迭代每一行
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
#迭代每一列
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
#迭代每一个项目
[ 3  4  5  6  7  8  9 10 11 12 13 14]
3 4 5 6 7 8 9 10 11 12 13 14 

5.numpy的array操作
numpy的array合并

numpy.vstack(tup)
沿着竖直方向将矩阵堆叠起来。

import numpy as np
A=np.array([1,2,3])
B=np.array([4,5,6])
C=np.vstack((A,B))
print(C)
#输出
[[1 2 3]
 [4 5 6]]

numpy.hstack(tup)
沿着水平方向将数组堆叠起来。

import numpy as np
A=np.array([1,2,3])
B=np.array([4,5,6])
D=np.hstack((A,B))
print(D)
#输出
[1 2 3 4 5 6]

numpy的array的分割

numpy.vspilt()
横向的分割
必须要等量分隔

import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.vsplit(A,3))
#输出
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])

numpy.hspilt()
横向的分割
必须要等量分隔

import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.hsplit(A,4))
#输出
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0],
       [4],
       [8]]), array([[1],
       [5],
       [9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

* numpy.split(ary, indices_or_sections, axis=0)*
当axis==1时表示纵向
axis==0时表示横向
等量分割

import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.split(A,2,axis=1))
#输出
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]

numpy.array_split(ary, indices_or_sections, axis=0)
与上面的区别就是支持不等量分隔

import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.array_split(A,3,axis=1))
#输出
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

6.numpy的复制
a=numpy.arrange(4)
b=a#代表a与b关联了起来,a改变那么b也会改变
如果仅仅只想赋值
可以用
b=a.copy()#a的改变不会使b也改变了

猜你喜欢

转载自blog.csdn.net/Yk_0311/article/details/81228232