Numpy 修炼之道 (4)—— 基本运算操作

Numpy 修炼之道 (4)—— 基本运算操作

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,所以自动转换出错。


         脑洞科技栈专注于人工智能与量化投资领域



了解更多干货文章,可以关注小程序八斗问答

猜你喜欢

转载自blog.csdn.net/gaoyan0335/article/details/86288951
今日推荐