【问题标题】:concatenate numpy arrays which are elements of a list连接作为列表元素的numpy数组
【发布时间】:2015-03-23 09:34:19
【问题描述】:

我有一个包含 numpy 数组的列表,例如 L=[a,b,c] 其中 a、b 和 c 是 numpy 数组,其大小为 T 中的 N_a、T 中的 N_b 和 T 中的 N_c。
我想逐行连接 a、b 和 c 并获得一个形状为 (N_a+N_b+N_c, T) 的 numpy 数组。显然,一种解决方案是运行一个 for 循环并使用 numpy.concatenate,但是有没有 Python 的方法可以做到这一点?

谢谢

【问题讨论】:

    标签: python arrays list numpy


    【解决方案1】:

    使用numpy.vstack

    L = (a,b,c)
    arr = np.vstack(L)
    

    【讨论】:

      【解决方案2】:

      help('concatenate' 有这个签名:

      concatenate(...)
          concatenate((a1, a2, ...), axis=0)
      
          Join a sequence of arrays together.
      

      (a1, a2, ...) 看起来像您的列表,不是吗?默认轴是您要加入的轴。所以让我们试试吧:

      In [149]: L = [np.ones((3,2)), np.zeros((2,2)), np.ones((4,2))]
      
      In [150]: np.concatenate(L)
      Out[150]: 
      array([[ 1.,  1.],
             [ 1.,  1.],
             [ 1.,  1.],
             [ 0.,  0.],
             [ 0.,  0.],
             [ 1.,  1.],
             [ 1.,  1.],
             [ 1.,  1.],
             [ 1.,  1.]])
      

      vstack 也是这样做的,但是看看它的代码:

      def vstack(tup):
          return np.concatenate([atleast_2d(_m) for _m in tup], 0)
      

      它所做的只是确保组件数组具有二维,而你的就是这样。

      【讨论】:

      • 我明白了。所以本质上,在这里使用连接应该更快。谢谢
      • vstack 不应该增加太多时间,因为它只是摆弄形状和步幅等属性。基本上它是一个方便的功能。
      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2023-03-11
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2018-05-13
      相关资源
      最近更新 更多