更多关于:NumPy…
Numpy 中数组上的算术运算符使用元素级别。最后的结果使用新的一个数组来返回。
>>> a = np.array( [20,30,40,50] ) >>> b = np.arange( 4 ) >>> b array([0, 1, 2, 3]) >>> c = a-b >>> c array([20, 29, 38, 47]) >>> b**2 array([0, 1, 4, 9]) >>> a<35 array([ True, True, False, False], dtype=bool)
需要注意的是,乘法运算符*
的运算在NumPy数组中也是元素级别的(这与许多矩阵语言不同)。如果想要执行矩阵乘积,可以使用dot
函数:
>>> A = np.array( [[1,1], [0,1]] ) >>> B = np.array( [[2,0], [3,4]] ) >>> A array([[1, 1], [0, 1]]) >>> B array([[2, 0], [3, 4]]) >>> A*B # 元素乘积(elementwise product) array([[2, 0], [0, 4]]) >>> A.dot(B) # 矩阵相乘(matrix product) array([[5, 4], [3, 4]]) >>> np.dot(A, B) # 矩阵相乘的另一种方式(another matrix product) array([[5, 4], [3, 4]])
某些操作(如+=
和*=
)可以修改现有数组,而不是创建新数组。
>>> a = np.ones((2,3), dtype=np.int32) >>> b = np.random.random((2,3)) >>> a *= 3 >>> a array([[3, 3, 3], [3, 3, 3]]) >>> a.dtype dtype('int32') >>> b.dtype dtype('float64') >>> b += a >>> b array([[ 3.42443069, 3.78421247, 3.46533145], [ 3.30761202, 3.1504406 , 3.23310437]]) >>> a += b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int32') with casting rule 'same_kind'
当使用不同类型的数组操作时,结果数组的类型对应于更一般或更精确的数组(称为向上转换的行为)。
由于定义 a时,数据类型指定为np.int32,而 a+b 生成的数据类型为 np.float64,所以自动转换出错。