Python Numpy列减法;从(k,)数组中的值减去(k,n)数组
说我有Python Numpy列减法;从(k,)数组中的值减去(k,n)数组,python,arrays,numpy,Python,Arrays,Numpy,说我有 x=np.random.random((3,10)) y=np.array([1,10,100]) 我想从y中减去x每列中的值。我可以这样做: np.array([y]*10).T-x 但是,这需要创建一个新数组,其大小为y(在本例中)的10倍。我还可以想象使用for循环。有人能建议一个更好的方法吗?类似的方法吗 >>> (y - x.T).T array([[ 8.79354250e-01, 5.30104393e-01, 7.78342126e-01,
x=np.random.random((3,10))
y=np.array([1,10,100])
我想从y
中减去x
每列中的值。我可以这样做:
np.array([y]*10).T-x
但是,这需要创建一个新数组,其大小为y
(在本例中)的10倍。我还可以想象使用for循环。有人能建议一个更好的方法吗?类似的方法吗
>>> (y - x.T).T
array([[ 8.79354250e-01, 5.30104393e-01, 7.78342126e-01,
4.56857161e-02, 5.32181828e-01, 1.47155126e-01,
3.39654176e-01, 3.72693537e-01, 4.32737024e-01,
7.55366710e-01],
[ 9.53976069e+00, 9.51725133e+00, 9.00439583e+00,
9.65411497e+00, 9.55728110e+00, 9.35189161e+00,
9.72451832e+00, 9.20089714e+00, 9.60367043e+00,
9.41722649e+00],
[ 9.99248465e+01, 9.96932738e+01, 9.93110996e+01,
9.94116657e+01, 9.98695626e+01, 9.92118001e+01,
9.93602275e+01, 9.99518088e+01, 9.98442735e+01,
9.93865628e+01]])
只需垂直堆叠
y
,然后减去x
。例如:
y[:, None] - x # insert a new axis into y (creating a new view of y)
或
这是因为y
现在具有形状(3,1)
,因此可以使用具有形状(3,10)
的x
进行广播
如果
x
的每个尾随维度(即从形状元组的末尾开始)等于y
的尾随维度,或者如果其中一个比较维度为1,则可以一起广播x
和y
。在本例中,y
的尾随维度更改为1,以便两个数组兼容。Ah。。。因此,我也可以y。完全重塑(3,1)-x
@atomh33ls,只要它是所需的形状。y[:,np.newaxis]
是重塑y
的另一种方式。
np.vstack(y) - x # stack y vertically (creating a copy of y)