Numpy:从没有repmats的矩阵中减去列

时间:2017-02-24 13:52:26

标签: numpy numpy-broadcasting

对于缺乏研究而感到抱歉 - 我匆忙。 当我这样做时

data = data-data[:,0]

我收到广播错误。我该怎么做让numpy了解我?

1 个答案:

答案 0 :(得分:2)

使用None/np.newaxis将切片扩展到2D,然后减去 -

data -= data[:,0,None]

或者,我们也可以重塑以获得2D -

data -= data[:,0].reshape(-1,1)

样品运行以检查形状,因此没有。昏暗的 -

In [103]: data = np.random.rand(4,5)

In [104]: data[:,0].shape    # Originally
Out[104]: (4,)

In [105]: data[:,0,None].shape
Out[105]: (4, 1)

In [106]: data[:,0].reshape(-1,1).shape
Out[106]: (4, 1)

在使用建议的方法之前和之后并排放置这些 -

data            :  (4,5)
data[:,0]       :    (4)

形状没有对齐以进行自动广播。

让我们延伸 -

data            :  (4,5)
data[:,0,None]  :  (4,1)

现在对于广播的减法来对齐形状,因此我们将每列被第一列减去。 docs on broadcasting应该有更多关于此的信息。