1

我已经到处寻找这个问题的答案,但似乎没有什么真正符合要求。我有非常大的文件,我试图用 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 的新手,所以我很欣赏清楚拼写出来的答案(即不依赖大量隐式编码知识)。必须有一种干净的方式来解析它,但我没有找到它。谢谢。

4

2 回答 2

0

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

于 2013-04-15T05:11:30.417 回答
0

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

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


从 pyables 网站:

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

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

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

于 2013-04-15T01:13:13.403 回答