数组的基本操作

数组可以用常见的运算符进行运算,这些运算都是应用到元素级别的,即对数组每个元素进行对应的计算。

>>> a = array([20,30,40,50])
>>> b = arange(4)
>>> b
array([0, 1, 2, 3])
>>> c = a - b
>>> c
array([20, 29, 38, 47])
>>> b ** 2
array([0, 1, 4, 9])
>>> 10 * sin(a)
array([9.129453, -9.880316, 7.4511313, -2.6237485])
>>> a < 35
array([True, True, False, False])

许多一元操作,例如计算数组中所有元素的总和、最大值、最小值等,都是通过NDArray类的方法实现的。

>>> a = random.rand((2,3))
>>> a
array([[0.07276357501084052, 0.9651795396371409, 0.6320670002828066]
      [0.2397294321569584, 0.7055379677147693, 0.8425088862948195]])
>>> a.sum()
3.457786401097335
>>> a.min()
0.07276357501084052
>>> a.max()
0.9651795396371409

对于多维数组,通过指定axis参数可以沿数组指定轴进行相关操作。

>>> b = arange(12).reshape(3,4)
>>> b
array([[0, 1, 2, 3]
      [4, 5, 6, 7]
      [8, 9, 10, 11]])
>>> b.sum(axis=0)
array([12, 15, 18, 21])
>>> b.min(axis=1)
array([0, 4, 8])
>>> b.cumsum(axis=1)
array([[0, 1, 3, 6]
      [4, 9, 15, 22]
      [8, 17, 27, 38]])

数组可以用常用的数学函数如sin、cos、sqrt、exp等进行按元素的运算,并生成一个新的数组。

>>> a = arange(3)
>>> a
array([0, 1, 2])
>>> exp(a)
array([1.0, 2.718281828459045, 7.38905609893065])
>>> sqrt(a)
array([0.0, 1.0, 1.4142135623730951])
>>> sin(a)
array([0.0, 0.84147096, 0.9092974])

和MATLAB不同,两个2维数组(也就是矩阵)相乘并非是矩阵相乘,而实两个数组对应元素相乘。实现矩阵相乘的功能需要用dot函数。

>>> A = array([[1,1],[0,1]])
>>> B = array([[2,0],[3,4]])
>>> A * B
array([[2, 0]
      [0, 4]])
>>> A.dot(B)
array([[5, 4]
      [3, 4]])
>>> dot(A, B)
array([[5, 4]
      [3, 4]])