Numpy 基础使用
1. 属性
array = np.array([[1,2,3],[2,3,4]]) #列表转化为矩阵
array.ndim # 维度
array.shape # 行数和列数
array.size # 元素个数
array.size # 数据类型
2. 定义矩阵
np.zeros((3,4))
np.ones((3,4),dtype = np.int)
np.empty((3,4)) # 生成的数据几乎接近为0
np.arange(10,20,2) # 10-19 的数据,2步长 左闭右开
np.arange(12).reshape(3,4) # 3行4列,0到11
a = np.linspace(1,10,20) # 从1到10,生成20个数据,19个等长线段
3. 运算
a+b # a、b有相同的shape
a-b
a**2 # 几次幂
np.sin(a) # a是角度,可以通过a*np.pi/180来转化为弧度
print(a<10) # 不管a的shape如何,始终返回一个bool列表
a*b # 对应元素相乘
np.dot(a, b) or a.dot(b) # 矩阵相乘
np.sum(a, axis=0)
np.min( ) np.max( ) # 最大值和最小值
np.argmin( ) np.argmax( ) # 最大值和最小值的索引
np.mean( ) np.average( ) # 求平均
np.median( ) # 中位数
np.cumsum( ) # 累加函数
np.diff( ) # 累差函数
np.nonzero( ) # 非零元素的坐标,各个维度单独返回一个array
np.sort( ) # 排序,可以指定axis
np.transpose( A ) or A.T # A的转置,比如A的shape是(2,3,2,4),转置过后变为(4,2,3,2)
np.clip( A, 5, 9 ) # 类似于过滤器,比9大的元素都替换成9,比5小的元素都替换成5
4. 索引、修改维度
一维: A[0]
二维: A[1][0] or A[1, 0]
可以利用 : 对一定范围内的元素进行切片操作,例如A[1, 1:3]返回第一行,1-2列的元素(左闭右开)
for item in A: # 迭代最外层的元素
for item in A.flat: # flat迭代器
A.flatten() # 降为1维,返回的是拷贝,对拷贝的修改不影响原始矩阵
A.ravel() # 降为1维,返回的是视图,相当于把原array压成一维,在视图上的修改就是直接在原array上的修改
A.reshape(-1) # 降为1维
np.squeeze(A, axis) # 删除A中维度为1的条目,如(1, 2, 3, 1)squeeze过后变为(2, 3),可以指定某一维,若指定的维度不是1会报错
5. 合并和分割
np.vstack((a,b,...)) # vertical 上下连接(最外层的维度上)
np.hstack((a,b,...)) # horizontal 左右连接 (第二个维度上)
A[:,np.newaxis] # 增加一个维度,使用上和None一样
np.concatenate((a,b,…), axis) # 指定维度上进行连接
np.split(A, 整数or数组, axis) # 沿axis轴分割数组,整数必须保证能均分,不然会报错。数组[3,5,7]表示在第3,5,7行进行切割
np.array_split # 和上面一样,不过整数可以不用保证均分
np.vsplit(A, 整数or数组) # 水平分割 等价于split在axis=0上分割
np.hsplit(A, 整数or数组) # 垂直分割 等价于split在axis=1上分割
6. 拷贝
b=a # 无复制
b=a[ : ] 和 b=a.view( ) # 创建视图(浅拷贝),即新建了一个数组对象,改变b的维度不会影响a的维度,但是b并没有拷贝一份a的数据,他们的数据是存放在同一块内存里的
b=a.copy( ) # 副本(深拷贝),b单独拷贝了一份a的数据,两者完全隔离互不影响