让我们用随机元素生成数组
输入:
In [62]: X
Out[62]:
array([[ 0.32322974, 0.50491961, 0.40854442, 0.36908488],
[ 0.58840196, 0.1696713 , 0.75428203, 0.01445901],
[ 0.27728281, 0.33722084, 0.64187916, 0.51361972],
[ 0.39151808, 0.6883594 , 0.93848072, 0.48946276]])
In [63]: a
Out[63]: array([ 0.01278876, 0.01854458, 0.16953393, 0.37159562])
我。沿axis=1减法
让我们沿着axis=1做减法,即我们想从X的第一行,X的第二行中减去a等等。为了便于检查正确性,我们只使用X 的第一行:
In [64]: X[0] - a
Out[64]: array([ 0.31044099, 0.48637503, 0.23901049, -0.00251074])
深入那里,那里发生了什么:
X[0,0] - a[0], X[0,1] - a[1], X[0,2] - a[2] , X[0,3] - a[3]
所以,我们将X 的第二个轴与a 的第一个轴匹配。因为,X 是 2D 和 a 是 1D,两者已经对齐:
X : n x n
a : n
所以,我们只需执行X-a 即可获得所有减法:
In [65]: X-a
Out[65]:
array([[ 0.31044099, 0.48637503, 0.23901049, -0.00251074],
[ 0.5756132 , 0.15112672, 0.5847481 , -0.3571366 ],
[ 0.26449405, 0.31867625, 0.47234523, 0.1420241 ],
[ 0.37872932, 0.66981482, 0.76894679, 0.11786714]])
还有,最后看看我们之前获得的X[0] - a是不是在这里。
重要提示:这里要注意的是a elems 将沿着一个轴,并且沿着该减法将进行并且广播将沿着另一轴发生。因此,在这种情况下,即使在 axis=1 上发生减法,a 的元素也会沿 axis=0 广播。
二。沿axis=0减法
同样,让我们沿着axis=0 做减法,即我们想从X 的第一列、X 的第二列中减去a,以此类推。为了便于检查正确性,我们只使用X 的第一列:
In [67]: X[:,0]-a
Out[67]: array([ 0.31044099, 0.56985738, 0.10774888, 0.01992247])
深入那里,那里发生了什么:
X[0,0] - a[0], X[1,0] - a[1], X[2,0] - a[2] , X[3,0] - a[3]
因此,我们将X 的第一个轴与a 的第一个轴匹配。因为X 是2D 和a 是1D,所以我们需要将a 扩展到2D 并使用a[:,None] 保持所有元素沿其第一个轴:
X : n x n
a[:,None] : n x 1
所以,我们使用X-a[:,None] 来获得所有减法:
In [68]: X-a[:,None]
Out[68]:
array([[ 0.31044099, 0.49213085, 0.39575566, 0.35629612],
[ 0.56985738, 0.15112672, 0.73573745, -0.00408557],
[ 0.10774888, 0.16768691, 0.47234523, 0.34408579],
[ 0.01992247, 0.31676379, 0.5668851 , 0.11786714]])
还有,最后看看我们之前得到的X[:,0] - a是不是在这里。