我一直在寻找这个问题的答案,但似乎没有什么能适合这个法案。我有非常大的文件,我试图用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新手,所以我很欣赏明确拼写出来的答案(即不依赖于大量隐含的编码知识)。必须有一种干净的解析方法,但我找不到它。感谢。
答案 0 :(得分:0)
对于非常大的数组(大于你的内存容量),你可以使用pytables以一些聪明的方式(使用HDF5格式)在磁盘上存储数组,这样就可以对它们进行操作而无需加载整个数组立刻进入记忆。然后,您不必手动分解数据集或一次操作一行。
我对ATpy一无所知所以你最好不要在ATpy邮件列表或至少一些天文python用户邮件列表上询问,因为ATpy可能内置了另一个解决方案。
来自pyables网站:
PyTables是一个用于管理分层数据集的软件包,旨在高效,轻松地处理大量数据。
PyTables建立在HDF5库之上,使用Python语言和NumPy包。
...快速但易于使用的工具,用于交互式浏览,处理和搜索大量数据。 PyTables的一个重要特性是它优化了内存和磁盘资源,因此数据占用的空间更少......
答案 1 :(得分:0)
考虑使用熊猫。它是为这种工作而打造的。但是数据文件需要以结构良好的二进制格式存储,如hdf5,以便在任何解决方案中获得良好的性能。