2010-12-03 23 views
5

Tengo una lista de varios cientos de matrices 10x10 que quiero apilar en una sola matriz Nx10x10. Al principio traté de un simpleConvierta una lista de matrices numpy 2D en una matriz numpy 3D?

newarray = np.array(mylist)

Pero eso regresé con "ValueError: Configuración de un elemento de matriz con una secuencia".

Luego encontré la documentación en línea para dstack(), que se veía perfecta: "... Esta es una manera simple de apilar matrices 2D (imágenes) en una sola matriz 3D para su procesamiento." Que es exactamente lo que trato de hacer. Sin embargo,

newarray = np.dstack(mylist) 

me dice que "ValueError: dimensiones de la matriz debe de acuerdo a excepción de d_0", lo cual es extraño porque todos mis arreglos son de 10x10. Pensé que tal vez el problema era que dstack() espera una tupla en lugar de una lista, pero

newarray = np.dstack(tuple(mylist)) 

produjo el mismo resultado.

En este punto he pasado aproximadamente dos horas buscando aquí y en otros lugares para averiguar qué estoy haciendo mal y cómo hacerlo correctamente. Incluso intenté convertir mi lista de matrices en una lista de listas y luego volver a una matriz 3D, pero tampoco funcionó (terminé con listas de matrices, seguidas por el "elemento de matriz de configuración"). como secuencia "error nuevamente".

Cualquier ayuda sería apreciada.

+1

¿Qué obtienes cuando haces algo como '[item.shape for item in mylist if item.shape! = (10, 10)]'? (es decir, ¿está usted realmente seguro de que todas las matrices tienen la misma forma?) –

+1

dstack ¿dónde ha estado toda mi vida? He estado utilizando hstack y vstack con [:,:, newaxis] basura – wim

Respuesta

13
newarray = np.dstack(mylist) 

debería funcionar. Por ejemplo:

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 * Resulta de mis imágenes solo era 10x8, así que era puramente mi falta de atención. Sin embargo, no había pensado bien en la parte rollaxis, eso ayudó. ¡Gracias por la rápida respuesta! – James

Cuestiones relacionadas