【问题标题】:Storing and reading large data files efficiently高效存储和读取大型数据文件
【发布时间】:2012-08-14 11:17:55
【问题描述】:

我正在做一个项目,我有来自 pdes 数值解的大型输入文件。数据格式如下。

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

对于每个 y 值,我们有多个 x 值,以及在每个点评估的函数值。我正在处理的数据大小约为[-3, 5]x[-3, 5],每个维度的步长为0.01,因此原始数据文件非常大(大约640,000 个条目)。将其读入内存也非常耗时,因为我正在使用的工具必须同时读取多个这种类型的原始数据文件。

我正在使用 Python。

有没有办法在 Python 中有效地存储和读取这样的数据?这个想法是包含一个工具,将这些原始数据文件按摩成可以更有效地读取的东西。我目前正在对数据进行插值并存储一些系数(本质上是通过计算时间来代替内存),但我确信必须有一种更简单的方法来帮助内存和时间。

感谢 SOCommunity!

PS:我在Java中看到了相关的问题。我在这里完全使用 Python。

【问题讨论】:

  • 如果xy 的值是可预测的,那你为什么要将它们存储在文件中呢?您是否考虑过根据f(x,y) 值的位置简单地生成它们的值?
  • 你读的怎么样?它不应该那么慢。
  • 我基本上是循环遍历每一行并用 [x][y] 存储到一个字典中。我的下一步是从文件中删除 x 和 y 值,因为它们就像@cheeken 建议的那样是可预测的。现在我想知道是否有办法插入数据,以便更好地优化阅读。

标签: python large-data


【解决方案1】:

有没有办法在 Python 中高效地存储和读取这样的数据?

如果您不需要一直将其保存在内存中,我建议将数据迁移到Sqlite 数据库。这还允许您对数据进行 SQL 查询。

【讨论】:

    【解决方案2】:

    如果你使用 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。

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多