2017-10-20 73 views
0

我有以下問題。我有一個3D數組像 matrix = np.zeros((30,30,100))其中每個條目是一個座標並獲得一個值。所以matrix [0][0][0]是座標x = 0,y0,z = 0,並且具有值0.現在我想要將所有的值存儲在像這樣的csv中,其中前3行是座標,第四個是相應的值:Python:將值存儲到csv的3D數組中

enter image description here

是否有快速的方式與numpy做到這一點?

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

更復雜的解決方案是可能的,但是這應該是核心。看看:csv io在python文檔或nditer如果你想要一個更復雜的迭代方法或使用pandas(需要一點時間來擺脫它)。