Numpy列式减法;从(k,)数组中的值减去(k,n)数组

时间:2014-10-11 09:34:17

标签: python arrays numpy

说我有

x=np.random.random((3,10))
y=np.array([1,10,100])

我希望从x中减去y每列中的值。我可以这样做:

np.array([y]*10).T-x

但是,这涉及创建一个大小为y(在这种情况下)的10倍的新数组。我还可以想象使用for循环。谁能建议一个更好的方法呢?

2 个答案:

答案 0 :(得分:3)

这样的东西?

>>> (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]])

答案 1 :(得分:2)

垂直堆叠y并减去x。例如:

y[:, None] - x    # insert a new axis into y (creating a new view of y)

np.vstack(y) - x  # stack y vertically (creating a copy of y)

这是有效的,因为y现在具有形状(3, 1),因此可以使用形状为x的{​​{1}}进行广播。

如果(3, 10)的每个尾随维度(即从形状元组的末尾开始)等于{{1}的尾随维度,则可以一起广播

xy或者,如果其中一个比较维度为1.在此示例中,x的尾随维度已更改为1,因此两个数组是兼容的。

相关问题