【问题标题】:Efficiently Reading Large Files with ATpy and numpy?使用 ATpy 和 numpy 高效读取大文件?
【发布时间】:2013-04-13 18:55:59
【问题描述】:

我已经到处寻找这个问题的答案,但似乎没有什么真正符合要求。我有非常大的文件,我试图用 ATpy 读取,数据以 numpy 数组的形式出现。对于较小的文件,以下代码就足够了:

sat = atpy.Table('satellite_data.tbl')

从那里我建立了一些变量,我必须在以后进行操作以用于绘图目的。有很多这样的操作:

w1 = np.array([sat['w1_column']])
w2 = np.array([sat['w2_column']])
w3 = np.array([sat['w3_column']])

colorw1w2 = w1 - w2 #just subtracting w2 values from w1 values for each element
colorw1w3 = w1 - w3 

等等。

但是对于非常大的文件,计算机无法处理。我认为在解析开始之前所有数据都存储在内存中,这对于 2GB 文件是不可行的。那么,我可以用什么来处理这些大文件呢?

我看过很多帖子,其中人们将数据分解成块并使用for 循环遍历每一行,但鉴于这些文件的性质,我认为这对我不起作用,以及我需要对这些数组进行的各种操作。我不能只对文件的每一行进行一次操作,因为每一行都包含许多分配给列的参数,在某些情况下,我需要对单个列中的数字进行多项操作。

老实说,我并不真正了解 ATpy 和 numpy 幕后发生的一切。我是 Python 的新手,所以我很欣赏清楚拼写出来的答案(即不依赖大量隐式编码知识)。必须有一种干净的方式来解析它,但我没有找到它。谢谢。

【问题讨论】:

  • 输入文件的格式究竟是什么?它们是平面二进制文件吗?

标签: python numpy scipy large-files astronomy


【解决方案1】:

对于非常大的数组(大于内存容量),您可以使用pytables,它以一些巧妙的方式(使用 HDF5 格式)将数组存储在磁盘上,这样就可以在不将整个数组加载到内存的情况下对它们进行操作立刻。然后,您不必手动分解数据集或一次一行地操作它们。

我对 ATpy 一无所知,因此您最好在 ATpy 邮件列表或至少一些天文 python 用户邮件列表中询问,因为 ATpy 可能内置了另一个解决方案。


来自 pyables 网站:

PyTables 是一个用于管理分层数据集的软件包,旨在高效轻松地处理大量数据。

PyTables 建立在 HDF5 库之上,使用 Python 语言和 NumPy 包。

... 快速且非常易于使用的工具,用于交互式浏览、处理和搜索大量数据。 PyTables 的一个重要特性是它优化了内存和磁盘资源,从而使数据占用更少的空间......

【讨论】:

    【解决方案2】:

    研究使用熊猫。它是为这种工作而建造的。但是数据文件需要以结构良好的二进制格式(如 hdf5)存储,以便在任何解决方案中获得良好的性能。

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多