在numpy中向矩阵行添加向量

use*_*913 19 numpy vector matrix

在numpy中有一种快速方法可以向矩阵的每一行或每列添加一个向量.

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

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

    vec=np.ones(3)
    mat+=np.tile(vec, (5,1))
Run Code Online (Sandbox Code Playgroud)

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

    for i in xrange(len(mat)):
        mat[i,:]+=vec
Run Code Online (Sandbox Code Playgroud)

有没有一种快速的方法在numpy中执行此操作而不使用C扩展?

能够虚拟平铺矢量,就像更灵活的广播版本一样,真是太棒了.或者能够以行方式或列方式迭代操作,您几乎可以使用某些ufunc方法.

Jos*_*del 26

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

mat += vec
Run Code Online (Sandbox Code Playgroud)

但更np.newaxis常见的是,您可以使用将阵列强制转换为可广播的形式.例如:

mat + np.ones(3)[np.newaxis,:]
Run Code Online (Sandbox Code Playgroud)

虽然没有必要将数组添加到每一行,但为了按列添加,必须执行相同的操作:

mat + np.ones(5)[:,np.newaxis]
Run Code Online (Sandbox Code Playgroud)

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