我正在从两个NetCDF文件中获取数据,每个文件都是521.8 MB。无可否认,这些都是相当大的文件。我正在研究一台MacBook Pro,它有4 GB的内存,但电脑大约4岁。代码是用Python编写的。导入大型数据文件的有效方法,Python
这些文件包含一年的全球天气数据。它是包含时间(长度1460),高度(长度17),纬度(长度73)和经度(长度144)的4D阵列。我一次只需要这些信息的某些部分。具体来说,我需要所有的时间,但只有一个高度水平,只有一个特定的经纬度区域(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)
行时耗尽内存。
是否有可能发生内存泄漏?有没有办法只得到我需要的特定范围的数据,所以我没有引入整个文件?是否有一种更有效的方法可以将数据带入整理我需要用来执行计算的数据部分?
如果可能,请从您正在导入的文件中提供几行示例数据。 – ChrisProsser
当我导入一个文件,将它保存到一个数组,然后输出数组,我得到以下内容: '[[[4.10000610e + 00 4.50001526e + 00 4.80000305e + 00 ..., 2.90000916e + 00 3.30000305e + 00 3.70001221e + 00] [3.00001526e + 00 3.50001526e + 00 3.90000916e + 00 ..., 1.60000610e + 00 2.10000610e + 00 2.50001526e + 00] [-9.99984741e-01 - 6.99996948e-01 -3.99993896e-01 ..., -1.49998474e + 00 -1.39999390e + 00 -1.19999695e + 00] ...,'数字当然继续,我稍后使用一个比例和偏移量。 – Stephen
感谢我终于搞清楚了ncdump,输出看起来像这样:-16146,-16176,-16226,-16306,-16436,-16616,-16836,-17056,-17286,-17506,-17706,-17866 ,-17976,-18016,-17996,-17916,-17776,-17566,-17306,-17016,-16746,-16526,-16416,-16416,-16496,-16606,-16726, – Stephen