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

2024-09-28 01:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,从两个NetCDF文件中获取数据,每个文件的大小为521.8mb。诚然,这些文件相当大。我正在开发一款MacBookPro,它有4GB的内存,但这台电脑大约有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)行时内存不足。在

是否有内存泄漏的可能?有没有办法只获取我需要的特定范围的数据,这样我就不会把整个文件都带来了?有没有一种更有效的方法,从把数据输入到整理我需要的数据部分来执行计算?在


Tags: 文件the数据内存代码from时间netcdf
2条回答

值得一提的是,我的电脑里有太多的数据,内存也快用完了。我用我的外置硬盘工作,并删除了一堆文件。然后,我终于弄明白了如何使用ncgen、ncdump等,我能够从每个大文件中取出所需的数据,并创建一个只包含这些数据的新文件。这将我的NetCDF文件从500MB减少到5MB。这使得代码运行起来也快得多。在

您可能需要做的是使用nccopy重新整理文件,然后处理这些块,因为有些变量似乎太大,无法放入内存中。或者获得更多内存(或虚拟内存)

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

相关问题 更多 >

    热门问题