如何将 np.arrays 附加到文件中并稍后将它们用于绘图目的

Posted

技术标签:

【中文标题】如何将 np.arrays 附加到文件中并稍后将它们用于绘图目的【英文标题】:How to append np.arrays to a file and use them for plotting purposes later 【发布时间】:2019-07-06 17:26:00 【问题描述】:

我在 for 循环中创建了多个形状为 (1,2) 的 np.array。数组包含某些位置的 x 和 y 坐标。在每次迭代中,我都会覆盖这些数组。我想将这些数组存储在一个文件中,以便以后可以使用它们来制作绘图。我不在乎,文件是否可供人类阅读。

目前我只对两个 (1,2) 数组进行了尝试,但非常重要的是,我可以在文件中存储任意数量的数组。 我尝试使用 filename.write('\n'.format(arr)) 将数组写入 .txt 文件,但我未能重用它们进行绘图。此外,我还没有看到如何将多个数组写入文件。

import numpy as np
arr = np.array([[-1, 0], [1, 0]])
# write to a .txt file:
with open('file.dat', 'w+') as f:
    f.write('\t\n'.format(arr[0], arr[1]))
    for i in range(3):
        arr = arr + 2
        f.write('\t\n'.format(arr[0], arr[1]))

文件如下所示:

[2 3]   [4 3]
[5 6]   [7 6]
[8 9]   [10  9]

使用此代码,我在左侧得到一列向量,在右侧得到一列向量。 我现在要做的是为第一列中的每个向量绘制arr[0][0]arr[0][1],并且为第二列向量绘制相同的图。所以我想从文件中加载这些信息并再次获取数组。 请记住,此示例仅显示了我对两个 (1,2) 数组的问题,但我需要能够对任意数量的向量执行相同操作,即它也应该适用于 arr = np.array([[-1, 0], [1, 0], [1, 2]) 甚至更多向量.

【问题讨论】:

您的 arr 是 (2,2) 形状。您写入文件的形式:“[2 3] [4 3]”很难解析。一个简单的csv 布局更好:“2, 3, 4, 3”。 为什么不将这些数组收集到一个列表中,然后从该列表中创建一个更大的数组呢?您知道如何将 append 值添加到 for 循环中的列表中,不是吗? @hpaulj 是的,我的示例 arr 是 (2,2),但就像我说的,我想将它写为单独的 (1,2) 数组或任何需要的形状,以便我可以从数据中制作我想要的图。 “简单的 csv 布局”是什么意思?如果我将数组放在一个列表中,我将不得不在整个 for 循环中保留这个巨大的列表,这就是我想在外部保存数据的原因。 【参考方案1】:

使用numpy.saveznumpy.savez_compressed 将一个或多个数组(它们可以具有不同的数据类型和形状)保存到一个文件中。 稍后,您可以使用numpy.load 恢复它们

例如:

my_arrays = [ np.ones([2, 2])*k for k in range(0, 4) ]
np.savez('myfile.npz', *my_arrays)

# Now restore it back
my_arrays = list(np.load('myfile.npz').values())

【讨论】:

以上是关于如何将 np.arrays 附加到文件中并稍后将它们用于绘图目的的主要内容,如果未能解决你的问题,请参考以下文章

将列表转储到pickle文件中并稍后检索[关闭]

如何将 pid 的值保存在数据结构中并稍后使用 fork() 访问它?

将多个数据文件组合成 np.arrays,存储在字典中

如何将带有 np.arrays 的 Pandas 系列变成数值?

Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]

如何使用 Mandrill 将 csv 文件附加到电子邮件?