推荐阅读时间:4min~6min 文章内容: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,所以自动转换出错。
相关推荐:
作者:无邪,个人博客:脑洞大开,专注于机器学习研究。