Python: Almacenamiento de valores en una matriz 3D a csv

Tengo el siguiente problema. Tengo una matriz 3D como matrix = np.zeros((30,30,100)) donde cada entrada es una coordenada y obtiene un valor. Entonces la matrix [0][0][0] es la coordenada x = 0, y0, z = 0 y tiene un valor de 0. Ahora quiero almacenar todos los valores en un csv como este, donde las primeras 3 filas son las Coordenadas y el 4º del valor correspondiente.

introduzca la descripción de la imagen aquí

¿Hay una manera rápida con numpy para hacer esto?

Podría usar pandas, puede cambiar la forma de la matriz y guardarla como csv.

 import numpy as np import pandas as pd # create an example array a = np.arange(24).reshape([2,3,4]) # convert it to stacked format using Pandas stacked = pd.Panel(a.swapaxes(1,2)).to_frame().stack().reset_index() stacked.columns = ['x', 'y', 'z', 'value'] # save to disk stacked.to_csv('stacked.csv', index=False) 

De lo contrario, puede aplicar

 np.ravel() 

a su matriz y luego restaure los índices usando una de las recetas en esta pregunta .

Me imagino que obtienes las coordenadas con los índices:

 def iter_3D(matrix): for i in range(matrix.shape[0]): for j in range(matrix.shape[1]): for k in range(matrix.shape[2]): yield i, j, k l = [] for i, j, k in iter_3D(matrix): l.append('%d %d %d %d' %(str(indices_x(i, j, k)), str(indices_y(i, j, k)), str(indices_z(i, j, k)), str(matrix[i, j, k])) with open('file.csv', 'w') as f: f.write("\n".join(l)) 

Son posibles soluciones más sofisticadas, pero este debería ser el núcleo. Eche un vistazo a: csv io en los documentos de Python o nditer si desea un método de iteración más sofisticado o use pandas (toma un poco de tiempo para evitarlo ).