web-dev-qa-db-fra.com

concaténer des tableaux numpy qui sont des éléments d'une liste

J'ai une liste contenant des tableaux numpy quelque chose comme L = [a, b, c] où a, b et c sont des tableaux numpy avec des tailles N_a en T, N_b en T et N_c en T.
Je veux concaténer par ligne a, b et c et obtenir un tableau numpy de forme (N_a + N_b + N_c, T). De toute évidence, une solution consiste à exécuter une boucle for et à utiliser numpy.concatenate, mais existe-t-il un moyen Pythonic de le faire?

Merci

20
TNM

Utilisation numpy.vstack .

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

help('concatenate' a cette signature:

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

    Join a sequence of arrays together.

(a1, a2, ...) ressemble à votre liste, n'est-ce pas? Et l'axe par défaut est celui que vous souhaitez rejoindre. Essayons donc:

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 fait aussi cela, mais regardez son code:

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

Tout ce qu'il fait est de s'assurer que les tableaux de composants ont 2 dimensions, ce que le vôtre fait.

7
hpaulj