读书笔记 numpy入门 第5章 广播

https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

https://github.com/jakevdp/PythonDataScienceHandbook

广播 Broadcasting

执行算术运算时使用不同形状的数组

广播规则

  • 如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补 1。
  • 如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为 1 的维度扩展以匹配另外一个数组的形状。
  • 如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于 1,那么会引发异常。

例子

1
2
3
4
5
import numpy as np
x1 = np.arange(3) + 5
x1

>>> array([5, 6, 7])
1
2
3
4
5
6
x2 = np.ones((3,3)) + np.arange(3)
x2

>>> array([[1., 2., 3.],
[1., 2., 3.],
[1., 2., 3.]])
1
2
3
4
5
6
x3 = np.ones((3,1)) + np.arange(3)
x3

>>> array([[1., 2., 3.],
[1., 2., 3.],
[1., 2., 3.]])

b1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2维数组和1维数组相加

M = np.ones((2, 3), dtype =int)
a = np.arange(3)

a
>>> array([0, 1, 2])

# 数组 a 的维度数更小,所以在其左边补 1:
# M.shape -> (2, 3)
# a.shape -> (1, 3)

# 补了1之后:
# M.shape -> (2, 3)
# a.shape -> (2, 3)

(M + a).shape
>>> (2, 3)

M + a
>>> array([[1, 2, 3],
[1, 2, 3]])

b2