私は以下の問題があります。私は matrix = np.zeros((30,30,100))
のような3D配列を持っています。ここでは、すべてのエントリが座標で値を取得します。だからmatrix [0][0][0]
座標x = 0、y0、z = 0と0の値を持っています。今私は最初の3行が座標と4番目の対応する値:Python:3D配列の値をcsvに保存する
これを行うには速い方法がありますか?
私は以下の問題があります。私は matrix = np.zeros((30,30,100))
のような3D配列を持っています。ここでは、すべてのエントリが座標で値を取得します。だからmatrix [0][0][0]
座標x = 0、y0、z = 0と0の値を持っています。今私は最初の3行が座標と4番目の対応する値:Python:3D配列の値をcsvに保存する
これを行うには速い方法がありますか?
パンダを使用することができます。アレイの形状を変更して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のいずれかを使用してインデックスを復元することができます。
私はあなたがインデックスと座標を取得想像:
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を参照してください(少し時間がかかります)。
あなたの対応する価値はどこから来ていますか? – vipertherapper
これらは別のプロセスに格納されますが、この例ではゼロだけを保存することもできます。 – Varlor
csvファイルである必要がありますか?私は、np.saveがnumpyでND配列を保存するためにより有用であることを発見しました。 – BenT