让我们生成带有随机元素的数组
Inputs :
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
,即我们想要减去a
从第一行开始X
,第二行X
等等。为了便于检查正确性,我们只使用第一行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
is 2D
and a
is 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
,即我们想要减去a
从第一栏开始X
,第二列X
等等。为了便于检查正确性,我们只使用第一列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
is 2D
and a
is 1D
,我们需要扩展a
to 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
之前获得的在这里。