vector - 将向量添加到numpy中的矩阵行

标签 vector matrix numpy

在 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]

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

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

相关文章:

c++ - 创建字符串数组/vector 并找出其中所有字符串长度的有效方法

c++ - 在字符串 vector 中查找字母数 C++

java - 尝试交换矩阵中的偶数/奇数行(Java)

python - 在 datetime、Timestamp 和 datetime64 之间转换

c++ 对象 vector ,包含动态分配的内存 - 'erase' 不起作用

c++ - 在 C++ 中使用指向动态分配对象的指针 vector 时如何避免内存泄漏?

c++ - 使用 STD 库在 C++ 中连接动态大小的矩阵

python - 如何使用 Pandas 数据框创建一个矩阵,该矩阵是多个矩阵的总和?

arrays - 使用字段名称进行索引时,结构化数组会删除字段标题

python - 将映射函数应用到 ndarray 的每个成员,并以索引作为参数