数组运算#

import numpy as np

数组间运算#

a = np.arange(-2, 4).reshape(3, 2)
b = np.ones((3, 2))
a, b
(array([[-2, -1],
        [ 0,  1],
        [ 2,  3]]),
 array([[1., 1.],
        [1., 1.],
        [1., 1.]]))
# 加法,element-wise
a + b
array([[-1.,  0.],
       [ 1.,  2.],
       [ 3.,  4.]])
# 整除
a // b
array([[-2., -1.],
       [ 0.,  1.],
       [ 2.,  3.]])
# 取余
a % b
array([[0., 0.],
       [0., 0.],
       [0., 0.]])
# 指数
a ** b
array([[-2., -1.],
       [ 0.,  1.],
       [ 2.,  3.]])
# a中每一个元素都乘3
3 * a
array([[-6, -3],
       [ 0,  3],
       [ 6,  9]])

常用函数#

# 取绝对值
np.abs(a)
array([[2, 1],
       [0, 1],
       [2, 3]])
# 3次方
np.power(a, 3)
array([[-8, -1],
       [ 0,  1],
       [ 8, 27]])
# 三角函数 
np.sin(a)
array([[-0.90929743, -0.84147098],
       [ 0.        ,  0.84147098],
       [ 0.90929743,  0.14112001]])
# 指数函数
np.exp(a)
array([[ 0.13533528,  0.36787944],
       [ 1.        ,  2.71828183],
       [ 7.3890561 , 20.08553692]])
# 对数函数
np.log(b)
array([[0., 0.],
       [0., 0.],
       [0., 0.]])

广播#

x = np.arange(1, 3)
x
array([1, 2])
y = np.ones((3, 2))
y
array([[1., 1.],
       [1., 1.],
       [1., 1.]])

x的shape为(2,)
y的shape为(3,2)
维数不相同,小维数的x先往左补1转换成(1,2),再广播成(3,2)

# x: (2,)==>(1,2)==>(3,2)
x + y
array([[2., 3.],
       [2., 3.],
       [2., 3.]])

Warning

Shape 为 (3,) 的数组无法广播成 (3, 2),比如说 np.zeros(3) + np.ones((3,2)) 会导致 ValueError