Python:将3D数组中的值存储到csv

时间:2017-10-20 15:48:23

标签: python arrays csv numpy

我遇到了以下问题。我有一个3D数组 matrix = np.zeros((30,30,100))其中每个条目都是一个坐标并获得一个值。所以matrix [0][0][0]是坐标x = 0,y0,z = 0并且值为0.现在我想将所有值存储在这样的csv中,其中前3行是坐标,第4行是对应值:

enter image description here

numpy有这么快的方法吗?

2 个答案:

答案 0 :(得分:6)

你可以使用pandas,它可以重塑数组并将其保存为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恢复索引。

答案 1 :(得分:1)

我想你会得到索引的坐标:

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 docs中的nditerpandas。< / p>