2017-10-20 6 views
0

私は以下の問題があります。私は matrix = np.zeros((30,30,100))のような3D配列を持っています。ここでは、すべてのエントリが座標で値を取得します。だからmatrix [0][0][0]座標x = 0、y0、z = 0と0の値を持っています。今私は最初の3行が座標と4番目の対応する値:Python:3D配列の値をcsvに保存する

のようなcsvのすべての値を格納する

enter image description here

これを行うには速い方法がありますか?

+0

あなたの対応する価値はどこから来ていますか? – vipertherapper

+0

これらは別のプロセスに格納されますが、この例ではゼロだけを保存することもできます。 – Varlor

+0

csvファイルである必要がありますか?私は、np.saveがnumpyでND配列を保存するためにより有用であることを発見しました。 – BenT

答えて

1

パンダを使用することができます。アレイの形状を変更して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) 

そうしないと、あなたはあなたの配列に

np.ravel() 

を適用し、レシピin this questionのいずれかを使用してインデックスを復元することができます。

0

私はあなたがインデックスと座標を取得想像:

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)) 

より洗練されたソリューションが可能ですが、これはコアでなければなりません。より洗練された反復メソッドが必要な場合やpandasを使用する場合は、csv ioのPythonドキュメントまたはnditerを参照してください(少し時間がかかります)。

関連する問題