连接作为列表元素的 numpy 数组

concatenate numpy arrays which are elements of a list

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

谢谢

使用numpy.vstack.

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

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)

它所做的额外工作就是确保组件数组具有 2 个维度,而您的维度也是如此。