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

Posted

技术标签:

【中文标题】Python:将 3D 数组中的值存储到 csv【英文标题】:Python: Storing values in a 3D array to csv 【发布时间】:2018-04-01 20:09:47 【问题描述】:

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

numpy 有没有快速的方法来做到这一点?

【问题讨论】:

你对应的值是从哪里来的? 它们被存储在另一个进程中,但是对于这个例子,只存储零也是可以的。 必须是 csv 文件吗?我发现 np.save 对于在 numpy 中保存 ND 数组更有用。 我认为 numpy.savetxt 也是如此。只要有上面的结构就可以了 【参考方案1】:

您可以使用 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 恢复索引。

【讨论】:

面板已过时。【参考方案2】:

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

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 io 或nditer,如果您想要更复杂的迭代方法或使用pandas(需要一点时间来解决它)。

【讨论】:

以上是关于Python:将 3D 数组中的值存储到 csv的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件中的值存储到数组中?

如何将文本文件中的值分配给python函数中的数组并将其用作全局?

Python中的稀疏3d矩阵/数组?

使用猫鼬模式将多个选择元素值中的值存储到MongoDB中的数组中

将CSV文件中的值存储到python中的列表中

我似乎无法访问存储在数组位置 0 和 1 中的值