import numpy as np
#全部行都能输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
术语广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在 相应的元素上进行。如果两个阵列具有完全相同的形状,则这些操作被无缝执行。
如果两个数组的维数不相同,则元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。
广播内在机制非常繁琐,这里给一种简单的规则描述,必须满足一下规则才能广播:
给出广播示意图:
#第一幅图
np.arange(3)+5
array([5, 6, 7])
# 第二幅图
a = np.ones((3, 3))
b = np.arange(3)
a
b
array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])
array([0, 1, 2])
a+b
array([[1., 2., 3.], [1., 2., 3.], [1., 2., 3.]])
# 第三幅图
a = np.arange(3).reshape(3, 1)
a
array([[0], [1], [2]])
b = np.arange(3)
b
array([0, 1, 2])
a+b
array([[0, 1, 2], [1, 2, 3], [2, 3, 4]])
用于执行算术运算(如 add() ,subtract() ,multiply() 和 divide() )的输入数组必须具 有相同的形状或符合数组广播规则。
数学运算函数 | |
---|---|
add(x1,x2 ) | 按元素添加参数,等效于 x1 + x2 |
subtract(x1,x2) | 按元素方式减去参数,等效于x1 - x2 |
multiply(x1,x2) | 逐元素乘法参数,等效于x1 * x2 |
divide(x1,x2) | 逐元素除以参数,等效于x1 / x2 |
exp(x) | 计算e的x次方。 |
exp2(x) | 计算2的x次方。 |
power(x1,x2) | 计算x1的x2次幂。 |
mod(x) | 返回输入数组中相应元素的除法余数. |
log(x) | 自然对数,逐元素。 |
log2(x) | x的基础2对数。 |
log10(x) | 以元素为单位返回输入数组的基数10的对数。 |
expm1(x) | 对数组中的所有元素计算exp(x) - 1 |
log1p(x) | 返回一个加自然对数的输入数组。 |
sqrt(x) | 按元素方式返回数组的正平方根。 |
square(x) | 返回输入的元素平方。 |
sin(x) | 三角正弦。 |
cos(x) | 元素余弦。 |
tan(x) | 逐元素计算切线。 |
around(x) | 四舍五入到所需精度的值。decimals 表示要舍入的小数位 |
floor(x) | 向下取整 |
ceil() | 向上取整 |
a = np.arange(9, dtype = np.float_).reshape(3,3)
b = np.array([10,11,12])
a
b
array([[0., 1., 2.], [3., 4., 5.], [6., 7., 8.]])
array([10, 11, 12])
#执行数组的加法
np.add(a, b)
a+b
array([[10., 12., 14.], [13., 15., 17.], [16., 18., 20.]])
array([[10., 12., 14.], [13., 15., 17.], [16., 18., 20.]])
#执行数组的减法
np.subtract(a,b)
a - b
array([[-10., -10., -10.], [ -7., -7., -7.], [ -4., -4., -4.]])
array([[-10., -10., -10.], [ -7., -7., -7.], [ -4., -4., -4.]])
#执行数组的位乘法
np.multiply(a,b)
a * b
array([[ 0., 11., 24.], [30., 44., 60.], [60., 77., 96.]])
array([[ 0., 11., 24.], [30., 44., 60.], [60., 77., 96.]])
#执行数组的位除法
np.divide(a,b)
a / b
array([[0. , 0.09090909, 0.16666667], [0.3 , 0.36363636, 0.41666667], [0.6 , 0.63636364, 0.66666667]])
array([[0. , 0.09090909, 0.16666667], [0.3 , 0.36363636, 0.41666667], [0.6 , 0.63636364, 0.66666667]])
a = np.arange(1,17).reshape(4, 4)
a
array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]])
#计算e的x次方,x是a中的每一个元素
np.exp(a)
array([[2.71828183e+00, 7.38905610e+00, 2.00855369e+01, 5.45981500e+01], [1.48413159e+02, 4.03428793e+02, 1.09663316e+03, 2.98095799e+03], [8.10308393e+03, 2.20264658e+04, 5.98741417e+04, 1.62754791e+05], [4.42413392e+05, 1.20260428e+06, 3.26901737e+06, 8.88611052e+06]])
#计算2的x次方,x是a中的每一个元素
np.exp2(a)
array([[2.0000e+00, 4.0000e+00, 8.0000e+00, 1.6000e+01], [3.2000e+01, 6.4000e+01, 1.2800e+02, 2.5600e+02], [5.1200e+02, 1.0240e+03, 2.0480e+03, 4.0960e+03], [8.1920e+03, 1.6384e+04, 3.2768e+04, 6.5536e+04]])
# 对数组中的所有元素计算exp(x) - 1
np.expm1(a)
array([[1.71828183e+00, 6.38905610e+00, 1.90855369e+01, 5.35981500e+01], [1.47413159e+02, 4.02428793e+02, 1.09563316e+03, 2.97995799e+03], [8.10208393e+03, 2.20254658e+04, 5.98731417e+04, 1.62753791e+05], [4.42412392e+05, 1.20260328e+06, 3.26901637e+06, 8.88610952e+06]])