高效存储和读取大型数据文件

5

我正在处理一个项目,其中有大量的输入文件,这些文件来自于偏微分方程的数值解。数据的格式如下所示。

x \t y \t f(x,y)

对于每个y值,我们有多个x值以及在每个点评估的函数值。我处理的数据大小大约为[-3, 5]x[-3, 5],每个维度的步长为0.01,因此原始数据文件非常大(约640,000条目)。将其读入内存也需要花费相当长的时间,因为我所使用的工具必须同时读取多个此类型的原始数据文件。
我正在使用Python。
有没有办法在Python中高效地存储和读取这样的数据?我的想法是包含一个工具,将这些原始数据文件转换成更有效地读取的东西。我目前正在插值数据并存储一些系数(本质上是用计算时间替换内存),但我确信肯定有更简单的方法既能节省内存又能节省时间。
感谢SOCommunity!
PS:我看到了与Java相关的问题。我完全在Python上工作。

1
如果xy的值是可预测的,为什么还要将它们存储在文件中呢?您是否考虑过根据f(x,y)值的位置生成它们的值呢? - cheeken
你是怎么读取它们的?不应该这么慢。 - Antimony
我基本上是在循环每一行,并将其存储到一个[x][y]的字典中。我的下一步是从文件中消除x和y值,因为他们像@cheeken建议的那样是可预测的。现在我想知道是否有一种方法来插值数据,以便我可以更好地优化读入。 - eqb
2个回答

3
如果你正在使用numpy(你可能应该这样做),numpy.save/numpy.saveznumpy.load应该能够轻松处理这个问题。
例如:
import numpy as np
xs = np.linspace(-3, 5, 800)
ys = np.linspace(-3, 5, 800)
f_vals = np.random.normal(size=(xs.size, ys.size))
np.savez('the_file.npz', xs=xs, ys=ys, f=f_vals)

很快,生成的文件小于5mb。


0
有没有办法在Python中高效地存储和读取这样的数据?
如果您不需要一直将其保存在内存中,我建议将数据迁移到Sqlite数据库。这也可以让您对数据进行SQL查询。

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