Numpy基本运算操作

元素乘积、矩阵相乘

更多关于: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,所以自动转换出错。

发表评论

电子邮件地址不会被公开。 必填项已用*标注