Numpy 基础运算

基本操作

数组上的算术运算符会应用到 元素 级别。下面是创建一个新数组并填充结果的示例:

>>> a = np.array( [20,30,40,50] ) #array([20, 30, 40, 50])
>>> b = np.arange( 4 ) ## array([0, 1, 2, 3])

加法

上述代码中的 ab 是两个属性为 array 也就是矩阵的变量,而且二者都是1行4列的矩阵, 其中b矩阵中的元素分别是从0到3。 如果我们想要求两个矩阵之间的减法,你可以尝试着输入

c = a + b   # array([20, 31, 42, 53])

通过执行上述脚本,将会得到对应元素相减的结果,即[10,31,42,53]。 同理,矩阵对应元素的相加和相乘也可以用类似的方式表示:

减法

c = a - b   #array([20, 29, 38, 47])

乘法

与许多矩阵语言不同,乘积运算符*在NumPy数组中按元素进行运算。即矩阵/向量对应元素的相乘, 这种乘法被称为’哈达马积’

e.g. 1

c = a * b  #array([  0,  30,  80, 150])

e.g. 2

A = np.array( [[1,1],
...             [0,1]] )
B = np.array( [[2,0],
...             [3,4]] )
A * B                       # elementwise product
array([[2, 0],
 [0, 4]])

e.g. 3 矩阵中元素乘方

#矩阵中各个元素的乘方
c = b ** 2        #array([0, 1, 4, 9])

矩阵乘积

与许多矩阵语言不同,乘积运算符*在NumPy数组中按元素进行运算。矩阵乘积可以使用@运算符(在python> = 3.5中)或dot函数或方法执行:

>>> A = np.array( [[1,1],
...             [0,1]] )
>>> B = np.array( [[2,0],
...             [3,4]] )
>>> A * B                       # elementwise product
array([[2, 0],
       [0, 4]])
>>> A @ B                       # matrix product
array([[5, 4],
       [3, 4]])
>>> A.dot(B)                    # another matrix product
array([[5, 4],
       [3, 4]])
>>> ret = np.dot(A,B)		 	# another matrix product
array([[5, 4],
       [3, 4]])

其他操作

逻辑判断

>>> a<35
array([ True, True, False, False])

某些操作(例如+=*=)会更直接更改被操作的矩阵数组而不会创建新矩阵数组。

>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022  ,  3.72032449,  3.00011437],
       [ 3.30233257,  3.14675589,  3.09233859]])
>>> a += b                  # b is not automatically converted to integer type
Traceback (most recent call last):
  ...
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'

当使用不同类型的数组进行操作时,结果数组的类型对应于更一般或更精确的数组(称为向上转换的行为)。

>>> a = np.ones(3, dtype=np.int32)
>>> b = np.linspace(0,pi,3)
>>> b.dtype.name
'float64'
>>> c = a+b
>>> c
array([ 1.        ,  2.57079633,  4.14159265])
>>> c.dtype.name
'float64'
>>> d = np.exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
       -0.54030231-0.84147098j])
>>> d.dtype.name
'complex128'

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦