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

TNM*_*TNM 22 python arrays numpy list

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

谢谢

shx*_*hx2 36

使用numpy.vstack.

L = (a,b,c)
arr = np.vstack(L)
Run Code Online (Sandbox Code Playgroud)


hpa*_*ulj 7

help('concatenate' 具有以下签名:

concatenate(...)
    concatenate((a1, a2, ...), axis=0)

    Join a sequence of arrays together.
Run Code Online (Sandbox Code Playgroud)

(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.]])
Run Code Online (Sandbox Code Playgroud)

vstack 也可以这样做,但请看一下其代码:

def vstack(tup):
    return np.concatenate([atleast_2d(_m) for _m in tup], 0)
Run Code Online (Sandbox Code Playgroud)

它所做的所有额外工作就是确保组件数组具有2维,这是您的。