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
Utilisation numpy.vstack
.
L = (a,b,c)
arr = np.vstack(L)
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.