【问题标题】:How to concatenate a vector into rows of a numpy matrix?如何将向量连接成 numpy 矩阵的行?
【发布时间】:2020-09-01 17:54:06
【问题描述】:

假设numpy向量a和矩阵b如下:

import numpy as np
a = np.array([1,2])
b = np.array([[3,4],[5,6]])

我想将向量 a 连接到 矩阵 b 的每一行。预期输出如下:

output=np.array([[1,2,3,4],[1,2,5,6]])

我有一个工作代码如下:

output=np.array([np.concatenate((a,row)) for row in b] )

有没有更快的 numpy 函数来执行这样的任务? 任何建议表示赞赏!

【问题讨论】:

    标签: python numpy


    【解决方案1】:
    output = np.zeros((2,4), int)
    output[:, :2] = a    # broadcasts (2,) to (1,2) to (2,2)
    output[:, 2:] = b
    

    【讨论】:

      【解决方案2】:

      你可以将anp.broadcast_to广播成b的形状,然后用np.hstack将它们水平堆叠:

      np.hstack([np.broadcast_to(a, b.shape), b])
      array([[1, 2, 3, 4],
             [1, 2, 5, 6]])
      

      【讨论】:

        【解决方案3】:

        好吧,我对您的解决方案与其他解决方案进行了“快速”比较。由于它们都能够达到相同的结果,因此看哪一个表现更好很重要。

        【讨论】:

        • 你忘记邀请我参加聚会了 ;-) 。顺便说一句:很好的比较!
        • @RuthgerRighart 你去吧;p
        • 第二快,不错:-)
        • 要在 numpy 中获得有代表性的时序,您需要尝试使用更大的数组
        • 对于如此小的数组大小,这些时间甚至不能代表性能的实际差异。您只是看到了所涉及的 numpy 函数的开销差异。 concatenate+for 循环在实际案例中的性能完全不如其他方法。
        【解决方案4】:

        您可以使用reshapeconcatenate

        np.concatenate((np.concatenate((a.reshape(1,2), a.reshape(1,2))), b), axis=1)
        

        或者使用tile 可能更好:

        np.concatenate((np.tile(a.reshape(1,2), (2,1)), b), axis=1)
        

        【讨论】:

          猜你喜欢
          • 2011-02-13
          • 2016-01-29
          • 1970-01-01
          • 1970-01-01
          • 2017-11-18
          • 1970-01-01
          • 2019-02-22
          • 1970-01-01
          • 2016-01-16
          相关资源
          最近更新 更多