一、上网查python的广播机制是在处理两个矩阵相减的时候,具体看下面的代码。
import numpy as np
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b_mean = np.mean(b, axis =0 )
print(b_mean)
b_std = np.std(b, axis = 0)
print(b_std)
normalize = (b - b_mean) / b_std
print(normalize)
输出结果:
b_mean is
[4. 5. 6.]
b_std is
[2.44948974 2.44948974 2.44948974]
normalize is
[[-1.22474487 -1.22474487 -1.22474487]
[ 0. 0. 0. ]
[ 1.22474487 1.22474487 1.22474487]]
通过以上代码可以看到,初始化的b是一个 3 * 3的矩阵。b的均值是一个 3 * 1的向量。最初我以为只有维数相同的张量才能做加减运算,后来一查是python的广播机制。
二、广播机制
先看代码
x = np.array([[1], [2], [3]])
print(x)
y = np.array([0, 1, 2])
print(y)
print("x - y = ", x - y)
输出结果
x is
[[1]
[2]
[3]]
y is
[0 1 2]
x - y is
[[ 1 0 -1]
[ 2 1 0]
[ 3 2 1]]
这里的x是 3 * 1的矩阵,y是 1 * 3的矩阵,在进行相减的时候将x变换成与y维数相同的矩阵x'(3 * 3)矩阵。
x' = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
然后y广播成3 * 3的矩阵y'。
y' = [[0, 1, 2], [0, 1, 2], [0, 1, 2]]
x' - y'得到就是相应结果。
三、参考文章Python 中矩阵或者数组相减的法则numpy之矩阵相减_yangwang的博客-CSDN博客