Python 中 Numpy 包的常用方法总结


NumPy (Numerical Python) 是 Python 语言一个重要的扩展库,支持大量的数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 通常与其他库 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于模仿 MatLab 的功能。Numpy 的官方手册的网址为: https://numpy.org/devdocs/user/quickstart.html

1. 创建数组

用 Numpy 创建数组有多种方法。首先,Numpy 中的 array 方法可以直接将 Python 的 list 类型转化为 Numpy 的数组类型 ndarray。例如,

一个一维数组:

>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])

一个二维数组:

>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
       [3, 4]])

注意,array方法中小括号中要包括一个中括号数组,而不能直接写成 np.array(1, 2, 3, 4)。

Numpy 中的 zeros 方法可以创建元素值全为 0 的矩阵, ones 方法可以创建元素值全为 1 的矩阵,而 empty 方法可以创建一个元素值任意的一个空矩阵。例如:

>>> np.zeros((3, 4)) # 3 行 4 列的零矩阵
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

>>> np.ones((3, 4)) # 3 行 4 列的一矩阵
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

>>> np.empty((2, 3)) # 2 行 3 列的空矩阵
array([[0.e+000, 5.e-324, 5.e-324],
       [5.e-324, 1.e-323, 1.e-323]])

Numpy 中的 arange 函数可以生成一个等差数列的数组,例如:

>>> np.arange(10) # 生成一个从 0 到 9 之间的数组,默认步长为 1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.arange(5, 10) # 生成一个从 5 到 9 之间的数组,默认步长为 1
array([5, 6, 7, 8, 9])

>>> np.arange(5, 10, 2) # 生成一个从 5 到 9 之间的数组,且步长为 2
array([5, 7, 9])

另外一个类似的函数为 linespace,不同的地方在于:arange 函数中第三个参数表示等差数组的步长,而 linespace 函数第三个参数表示一共生成的元素个数。若生成一系列等差的浮点数,则用 linespace 更好些。

>>> np.linspace(0, 2, 9 ) # 生成从 0 到 2 之间共 9 个数
array([0.  , 0.25, 0.5 , 0.75, 1.  , 1.25, 1.5 , 1.75, 2.  ])

2. 数组索引与切片

对于一维数组,Numpy 的索引切片类似 Python list 类型的索引切片,例如:

>>> a = np.arange(4, 10) # 生成一个从 4 到 9 之间的数组
>>> a
array([4, 5, 6, 7, 8, 9])

>>> a[2] # 数组 a 的第 3 个元素
6

>>> a[2:4] # 数组 a 的第 3 与第 4 个元素
array([6, 7])

>>> a[-1] # 数组 a 的最后一个元素
9

>>> a[ : : -1] # 数组 a 倒序
array([9, 8, 7, 6, 5, 4])

>>> a[3:6:2] = 4 # 将数组 a 从第 4 到 第 6 个元素间隔为 2 赋值为 4
>>> a
array([4, 5, 6, 4, 8, 4])

对于多维数组,Numpy 数组的索引和切片用逗号分隔不同维度,例如:

>>> b = np.arange(12).reshape(3,4) # 创建一个 3 行 4 列的二维数组
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

>>> b[1, 2] # 二维数组第 2 行第 3 列中的元素
6

>>> b[1:3, 2] # 二维数组第 3 列中, 第 2 行到第 3 行的元素
array([ 6, 10])

>>> b[2, :] # 第 3 行的全部元素
array([ 8,  9, 10, 11])

3. 数组运算

Numpy 可以对数组进行加减,幂运算,判断大小等,例如:

>>> a = np.arange(4)
>>> b = np.arange(3, 7)
>>> a
array([0, 1, 2, 3])
>>> b
array([3, 4, 5, 6])

>>> a - b # 两数组相减
array([-3, -3, -3, -3])

>>> a + b # 两数组相加
array([3, 5, 7, 9])

>>> a * 2 # 数组每个元素乘以一个数值
array([0, 2, 4, 6])

>>> a ** 2 # 数组每个元素都平方
array([0, 1, 4, 9], dtype=int32)

>>> a > 2 # 数组每个元素与一个数值比较大小
array([False, False, False,  True])

Numpy 也支持二维数组的一些运算,包括矩阵的转置,逆矩阵,矩阵的乘积等,例如:

>>> a = np.array([[4.0, 5.0], [6.0, 7.0]])
>>> a
array([[4., 5.],
       [6., 7.]])
>>> b = np.array([[1.0, 2.0], [3.0, 4.0]])
>>> b
array([[1., 2.],
      [3., 4.]])

>>> a.transpose() # a 的转置矩阵
array([[4., 6.],
       [5., 7.]])

>>> np.linalg.inv(a) # a 的逆矩阵
array([[-3.5,  2.5],
       [ 3. , -2. ]])

>>> np.linalg.eig(a) # a 的特征值与特征向量
(array([-0.17890835, 11.17890835]), array([[-0.76729658, -0.57152478],
       [ 0.64129241, -0.82058481]]))

# 矩阵 a 与 b 对应元素相乘,有两种方式:使用 multiply 函数或用乘积符号 *
>>> np.multiply(a, b)
array([[ 4., 10.],
       [18., 28.]])
 >>> a * b
array([[ 4., 10.],
       [18., 28.]])

# 矩阵 a 与 b 的点积,使用 dot 函数
>>> np.dot(a, b)
array([[19., 28.],
       [27., 40.]])

另外,Numpy 还有专门支持二维数组的类型 Matrix,可以更方便地进行一些矩阵运算,感兴趣的读者可以参见官网:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html

发布了280 篇原创文章 · 获赞 496 · 访问量 146万+

猜你喜欢

转载自blog.csdn.net/robert_chen1988/article/details/102477847