如何将 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.savez
或numpy.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 附加到文件中并稍后将它们用于绘图目的的主要内容,如果未能解决你的问题,请参考以下文章
如何将 pid 的值保存在数据结构中并稍后使用 fork() 访问它?
如何将带有 np.arrays 的 Pandas 系列变成数值?