我有以下問題。我有一個3D數組像 matrix = np.zeros((30,30,100))
其中每個條目是一個座標並獲得一個值。所以matrix [0][0][0]
是座標x = 0,y0,z = 0,並且具有值0.現在我想要將所有的值存儲在像這樣的csv中,其中前3行是座標,第四個是相應的值:Python:將值存儲到csv的3D數組中
是否有快速的方式與numpy做到這一點?
我有以下問題。我有一個3D數組像 matrix = np.zeros((30,30,100))
其中每個條目是一個座標並獲得一個值。所以matrix [0][0][0]
是座標x = 0,y0,z = 0,並且具有值0.現在我想要將所有的值存儲在像這樣的csv中,其中前3行是座標,第四個是相應的值:Python:將值存儲到csv的3D數組中
是否有快速的方式與numpy做到這一點?
您可以使用熊貓,它可以重新整形數組並將其另存爲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))
更復雜的解決方案是可能的,但是這應該是核心。看看:csv io在python文檔或nditer如果你想要一個更復雜的迭代方法或使用pandas(需要一點時間來擺脫它)。
您的相應值從哪裏來? – vipertherapper
它們存儲在另一個進程中,但是對於這個例子,只存儲零也是可以的。 – Varlor
它是否必須是csv文件?我發現np.save在保存numpy ND陣列時更加有用。 – BenT