2010-12-03 6 views
5

J'ai une liste de plusieurs centaines de tableaux 10x10 que je veux regrouper dans un seul tableau Nx10x10. Au début, j'essayé simpleConvertir une liste de tableaux numpy 2D en un tableau numpy 3D?

newarray = np.array(mylist)

Mais ce retour avec « ValueError: la fixation d'un élément de tableau avec une séquence. »

Ensuite, j'ai trouvé la documentation en ligne pour dstack(), qui semblait parfaite: "... C'est un moyen simple d'empiler des tableaux 2D (images) dans un seul tableau 3D pour le traitement." Ce qui est exactement ce que j'essaie de faire. Cependant,

newarray = np.dstack(mylist) 

me dit "ValueError: les dimensions de tableau doivent se mettre d'accord, sauf pour D_0", ce qui est étrange parce que tous mes tableaux sont 10x10. Je pensais que le problème était que dstack() attend un tuple au lieu d'une liste, mais

newarray = np.dstack(tuple(mylist)) 

le même résultat. À ce stade, j'ai passé environ deux heures à chercher ici et ailleurs pour savoir ce que je fais mal et/ou comment s'y prendre correctement. J'ai même essayé de convertir ma liste de tableaux en une liste de listes puis de les réintégrer dans un tableau 3D, mais ça ne fonctionnait pas non plus (j'ai fini avec des listes de listes de tableaux, suivies de l'élément "array array" comme séquence "erreur encore une fois).

Toute aide serait appréciée.

+1

Qu'obtenez-vous lorsque vous faites quelque chose comme '[item.shape pour item dans mylist if item.shape! = (10, 10)]'? (ie êtes-vous _really_ sûr que tous les tableaux ont la même forme?) –

+1

dstack où avez-vous été toute ma vie .. j'ai utilisé hstack et vstack avec [:,:, newaxis] ordures – wim

Répondre

13
newarray = np.dstack(mylist) 

devrait fonctionner. Par exemple:

import numpy as np 

# Here is a list of five 10x10 arrays: 
x=[np.random.random((10,10)) for _ in range(5)] 

y=np.dstack(x) 
print(y.shape) 
# (10, 10, 5) 

# To get the shape to be Nx10x10, you could use rollaxis: 
y=np.rollaxis(y,-1) 
print(y.shape) 
# (5, 10, 10) 
+0

* facepalm * Il se avère sur mes images était seulement 10x8, donc c'était purement mon propre inattention. Je n'avais pas vraiment pensé à la partie rollaxis, ça m'a aidé. Merci pour la réponse rapide! – James

Questions connexes