繁体   English   中英

导入大型数据文件的有效方法,Python

[英]Efficient way to import large data file, Python

我正在研究一个从两个NetCDF文件获取数据的项目,每个文件的大小为521.8 MB。 诚然,这些都是相当大的文件。 我正在使用内存为4 GB的MacBook Pro,但是计算机的使用年限约为4年。 代码是用Python编写的。

这些文件包含一年中整个地球的气象数据。 它是一个4D数组,其中包含时间(长度1460),高度(长度17),纬度(长度73)和经度(长度144)。 我一次只需要这些信息的某些部分。 具体来说,我需要所有时间,但只需要一个海拔高度,并且只需要特定的经纬度区域(20x44)。

我的代码从两个文件中收集了所有这些数据,仅识别了我需要的数据,执行了计算,然后将数据输出到文本文件中。 在完成该年的工作后,它遍历了63年的数据,即126个同等大小的文件。 现在,代码说它在过程开始时就耗尽了内存。 相关代码似乎是:

from mpl_toolkits.basemap.pupynere import NetCDFFile

#Create the file name for the input data.
ufile="Flow/uwnd."+str(time)+".nc"
vfile="Flow/vwnd."+str(time)+".nc"

#Get the data from that particular file.
uu=NetCDFFile(ufile)
vv=NetCDFFile(vfile)

#Save the values into an array (will be 4-dimentional)
uwnd_short=uu.variables['uwnd'][:]
vwnd_short=vv.variables['vwnd'][:]

因此,第一部分将创建NetCDF文件的名称。 第二部分从NetCDF文件中获取所有数据。 第三部分将导入的数据放入4D数组中。 (由于Python如何处理数据,从技术上讲,这可能不是一个数组,但由于我的C ++背景,我认为是这样。由于缺乏适当的词汇而深表歉意。)稍后,我分离出所需的特定数据从4D数组中进行计算。 麻烦在于这曾经可以工作,但是现在我的计算机在vv=NetCDFFile(vfile)行上运行时内存vv=NetCDFFile(vfile)

某处可能存在内存泄漏? 有没有一种方法只能获取我需要的特定数据范围,因此我不会导入整个文件? 从引入数据到整理出我需要的数据部分再进行计算,是否有更有效的方法?

您可能需要做的是使用nccopy重新整理文件,然后处理这些块,因为某些变量似乎很大以适合内存。 那或获得更多的内存(或虚拟内存)。

nccopy文档在这里http://www.unidata.ucar.edu/software/netcdf/docs/guide_nccopy.html

不管它的价值是多少,我确实在计算机上存储了太多数据,并且内存不足。 我使我的外部硬盘驱动器可以工作,并删除了一堆文件。 然后,我最终弄清楚了如何使用ncgen,ncdump等。我能够仅从每个大文件中取出所需的数据,并创建一个仅包含该数据的新文件。 这将我的NetCDF文件从500MB减少到5MB。 这使得代码也可以更快地运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM