.. _dos-meteoinfolab-milab_cn-numeric-array_operation: *************************** 数组的基本操作 *************************** 数组可以用常见的运算符进行运算,这些运算都是应用到元素级别的,即对数组每个元素进行对应的计算。 :: >>> 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]])