NumPy

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()
posted @ 2018-12-01 19:18  gogogo11  阅读(350)  评论(0编辑  收藏  举报