NumPy
建议
- 使用numpy时, 建议采用面向过程的思想, 因为numpy中对象有的, numpy模块都会提供函数获取到或者进行操作
- 学会了MATLAB, 在NumPy中可以找到很多MATLAB的影子
数组操作
数组的拼接与分割
- np.concatenate((arr1, arr2), axis=1) # axis=1表示列优先, axis=0表示行优先, 它的功能和np.hstack和np.vstack一样
- np.split(arr, 2, axis=1) # axis表示列优先, axis=0表示行优先, 它的功能和np.hsplit和np.vsplit一样, 返回list, 包含ndarray
- 记忆方法: 列优先则是在水平方向放去拉伸数组, 行优先则是在竖直方向上去拉伸数组
其他操作
- np.reshape()
- np.shape()
- np.size()
- np.diag()
- np.eye()
- np.zeros()
- np.ones()
有用的
- np.max()
- np.min()
- 以上返回的是指
- np.argmax()
- np.argmin()
- 返回的是对应的值的下标
- np.std()
- np.mean()
- np.var()
- np.cumsum()
- np.cumprod()
- np.sum()
random模块
- np.random.rand(): 均匀分布
- np.random.randn(): 高斯分布
- np.random.uniform(): 生成[0, 1]范围的均匀分布
- np.random.normal(): 高斯分布
矩阵(是ndarray的子类)操作
- 通过字符串的方式模仿MATLAB(但是还是MATLAB使用起来更加方便)
- mat = np.mat('1 2 3; 4 5 6') <=> np.matrix('1 2 3; 4 5 6', copy=False)
- mat = np.matrix('[1 2 3; 4 5 6]', copy=True) # 创建一个矩阵
- mat = np.bmat('arr1; arr2') # 通过两个分块矩阵创建一个新的矩阵, bmat是block matrix
ufunc
-
在numpy中所有的符号运行都是调用了ufunc
- +, -, *, /, **
-
当两个矩阵的shape一致时好理解, 但是当shape不一样的时候, ufunc会采用广播机制
- 如:
- arr1 = np.mat([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- arr2 = np.mat([1, 2, 3])
- arr1 + arr2 ?
- ufunc + 会将arr2的数据进行广播生成一个[[1, 2, 3], [1, 2, 3], [1, 2, 3]]再参与运算
- 如:
保存读取数据
-
保存数组(和MATLAB中的save一样)
-
二进制保存
- np.save(filename, arr)
- np.savez(filename, arr1, arr2, arr3) # 保存多个
-
文本保存(更加常用)
- np.savetxt(filename, arr, fmt='%d', delimeter=',') # 保存为csv格式
-
-
读取数据
-
二进制
- np.load()
-
文本
- np.loadtxt()
-