Python:将值存储在3D数组中并导出为CSV文件

9
我有一个问题。我有一个3D数组,如matrix = np.zeros((30,30,100)),其中每个条目都是一个坐标并获得一个值。因此,matrix [0][0][0]是坐标x=0,y=0,z=0,并且其值为0。现在我想将所有这些值存储在CSV中,其中前3行是坐标,第4行是相应的值:enter image description here 是否有一种使用numpy快速完成此操作的方法?

你的对应值来自哪里? - rustyshackleford
它们存储在另一个进程中,但对于这个例子,仅存储零也可以。 - Varlor
它必须是CSV文件吗?我发现在numpy中,np.save更适用于保存ND数组。 - BenT
我认为numpy.savetxt也是一样的。只要它的结构像上面那样,就可以了。 - Varlor
2个回答

9
你可以使用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()

将其添加到您的数组中,然后使用此问题中的一种方法恢复索引


1
面板已过时。 - Rashik

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

更为复杂的解决方案也是可能的,但这应该是核心。如果您想要更高级的迭代方法,请查看Python文档中的csv ionditer,或者使用pandas(需要一些时间来掌握)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接