Numpy常用函数与知识点总结

Numpy数组初始化

import numpy as np # 引入库 
array = np.array([[1,2,3],[2,3,4]], dtype=np.int64) # 初始化矩阵 
np.empty((2,3)) # 初始化为接近于0的2*3矩阵 
np.arange(12) # 初始化0-11的矩阵 
np.arrange(12).reshape((3,4)) # 初始化后调整shape为3*4 
np.linspace(1,10,16).reshape((3,4)) # 初始化1-10范围内16个等距点 
np.random.random((2,3)) # 初始化随机的2*3矩阵

Numpy数组性质

函数

说明

输出

array1.dot(array2)

矩阵点乘

array1*array2

矩阵叉乘

array*n

矩阵乘常数

常数与矩阵每个元素相乘

array.T

矩阵转置

array.ndim

维度

2

array.shape

形状

(2, 3)

array.size

元素数量

6

array.dtype

元素的类型

int64

Numpy数组运算

函数

说明

np.sum(array, axis=1)

0:按列跨行; 1:按行跨列

np.min(array)

最小值

np.max(array)

最大值

np.argmin(array)

最小值索引

np.argmax(array)

最大值索引

np.mean(array)

平均值

np.average(array)

平均值

np.median(array)

中位数

np.cumsum(array)

累加

np.diff(array)

相邻两数相减

np.nonzero(array)

非零值的行数和列数

np.sort(array)

每行单独排序

np.transpose(array)

对称矩阵,等价于array.T

np.clip(array, m ,n)

所有小于n的数修改为n,所有大于m的数修改为m;可用来修正sigmoid函数输出,防止过拟合

Numpy数组合并分割与复制

np.vstack(array1, array2) # vertical stack垂直合并 
np.hstack(array1, array2) # horizontal stack横向合并 # 注意一个一维矩阵,不能通过转置将横向数列转变为纵向数列 
array[np.newaxis,:] # 在行上加一个维度 array[:,np.newaxis] # 在列上加一个维度,可实现横向变纵向 
np.concatenate((array1, array2, array3, array4), axis=1) # 多个数组合并; 0:跨行合并; 1:跨列合并 
np.split(array, 2, axis=0) # 平均分割; axis=0:跨行分割; axis=1:跨列分割 
np.array_split(array, 3, axis=0) # 不均等分割 
np.vsplit(array, 3) # 纵向分割, 跨行分割, axis=0 
np.hsplit(array, 2) # 横向分割, 跨列分割, axis=1 
array1 = array # id相同 
array2 = array.copy() # 深层复制, id不同

代码技巧

array[array==5]=0 # array中所有值等于5的元素修改为0 
for row in array:
    print(row) # 输出行 
for column in array.T:
    print(column) # 输出列,通过转置 
for item in array.flat:
    print(item) # 输出每个元素,通过压缩为一维矩阵
array1 = np.zeros((200, 200), order='C') #C-type 
array2 = np.zeros((200, 200), order='F') #Fortran 
np.concatenate((a, b), axis=0) #axis=0合并,跨行合并,C更快 
np.concatenate((a, b), axis=0) #axis=1合并,跨列合并,F更快

array.flatten() # 压缩为一维矩阵 
array.ravel() # 压缩为一维矩阵,速度比flatten快,ravel()是view而非flatten的copy
# ---------view--------
a_view1 = a[1:2, 3:6]    # 切片 slice 
a_view2 = a[:100]        # 同上 
a_view3 = a[::2]         # 跳步 
a_view4 = a.ravel()      # 上面提到了 
# ---------copy--------
a_copy1 = a[[1,4,6], [2,4,6]]   # 用 index 选 
a_copy2 = a[[True, True], [False, True]]  # 用 mask 
a_copy3 = a[[1,2], :]        # 虽然 1,2 的确连在一起了, 但是他们确实是 copy 
a_copy4 = a[a[1,:] != 0, :]  # fancy indexing 
a_copy5 = a[np.isnan(a), :]  # fancy indexing 
# ---------建议--------# 
1.使用 np.take() , 替代用 index 选数据的方法. 
np.take(array_all, array_indices, axis=0) 
# 从array_all中取出array_indices指向的数据 
# 2.使用 np.compress(), 替代用 mask 选数据的方法. 
np.compress(mask, a, axis=0) # 用True和False取出数据 
a = a + 1         # 0.035230 
a = np.add(a, 1)  # 0.032738 
# 上面两个功能相同, 是copy格式, 但存在时间差 
a += 1                 # 0.011219 
np.add(a, 1, out=a)    # 0.008843 
# 上面两个功能相同, 是view格式, 但存在时间差