数组运算#
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