23

在 numpy 中是否有一种快速方法可以将向量添加到矩阵的每一行或每一列。

最近,我一直在将向量平铺到矩阵的大小,这会占用大量内存。例如

    mat=np.arange(15)
    mat.shape=(5,3)

    vec=np.ones(3)
    mat+=np.tile(vec, (5,1))

我能想到的另一种方法是使用 python 循环,但循环很慢:

    for i in xrange(len(mat)):
        mat[i,:]+=vec

有没有一种快速的方法可以在 numpy 中做到这一点而不诉诸 C 扩展?

能够虚拟平铺矢量会很好,就像更灵活的广播版本一样。或者能够逐行或逐列地迭代操作,您几乎可以使用某些 ufunc 方法来完成。

4

1 回答 1

37

为了向每一行添加一维数组,广播已经为您处理好了事情:

mat += vec

然而,更一般地,您可以使用np.newaxis将数组强制转换为可广播的形式。例如:

mat + np.ones(3)[np.newaxis,:]

虽然不需要将数组添加到每一行,但对于按列添加也需要这样做:

mat + np.ones(5)[:,np.newaxis]

编辑:正如塞巴斯蒂安提到的,对于行添加,mat + vec已经正确处理了广播。它也比使用np.newaxis. 我已经编辑了我的原始答案以明确这一点。

于 2012-08-15T14:37:31.497 回答