numpy.vstack
est parfait pour cette situation
import numpy as np
arr = np.ones((50,100,25))
np.vstack(arr).shape
> (5000, 25)
Je préfère utiliser stack
, vstack
o hstack
sur reshape
parce que reshape
se contente de balayer les données et semble les forcer à prendre la forme désirée. Cela peut être problématique si vous voulez, par exemple, prendre des moyennes de colonnes.
Voici une illustration de ce que je veux dire. Supposons que nous ayons le tableau suivant
>>> arr.shape
(2, 3, 4)
>>> arr
array([[[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]],
[[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7]]])
Nous appliquons les deux méthodes pour obtenir un tableau de forme (3,8)
>>> arr.reshape((3,8)).shape
(3, 8)
>>> np.hstack(arr).shape
(3, 8)
Cependant, si nous examinons la manière dont ils ont été remodelés dans chaque cas, la hstack
nous permettrait de prendre des sommes de colonnes que nous aurions également pu calculer à partir du tableau original. Avec reshape, ce n'est pas possible.
>>> arr.reshape((3,8))
array([[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 7, 7, 7, 7],
[7, 7, 7, 7, 7, 7, 7, 7]])
>>> np.hstack(arr)
array([[1, 2, 3, 4, 7, 7, 7, 7],
[1, 2, 3, 4, 7, 7, 7, 7],
[1, 2, 3, 4, 7, 7, 7, 7]])