在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方法进行操作。

最佳答案

为了在每一行中添加一维数组,广播已经为您解决了很多问题:

mat += vec

但是,更一般而言,您可以使用np.newaxis将数组强制转换为可广播形式。例如:
mat + np.ones(3)[np.newaxis,:]

虽然不必将数组添加到每一行,但对于按列添加也需要这样做:
mat + np.ones(5)[:,np.newaxis]

编辑:Sebastian提到,对于行添加,mat + vec已经正确处理了广播。它也比使用np.newaxis更快。我已经编辑了原始答案,以使这一点变得清楚。

关于vector - 将向量添加到numpy中的矩阵行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11971089/

10-11 23:24
查看更多