tia*_*ago 11 python numpy netcdf
我正在尝试使用非常大的netCDF文件(每个大约400 Gb)的数据.每个文件都有一些变量,都比系统内存大得多(例如180 Gb vs 32 Gb RAM).我试图使用numpy和netCDF4-python通过一次复制一个切片并对该切片进行操作来对这些变量进行一些操作.不幸的是,读取每个切片需要很长时间,这会影响性能.
例如,其中一个变量是形状数组(500, 500, 450, 300).我想在切片上操作[:,:,0],所以我做了以下事情:
import netCDF4 as nc
f = nc.Dataset('myfile.ncdf','r+')
myvar = f.variables['myvar']
myslice = myvar[:,:,0]
Run Code Online (Sandbox Code Playgroud)
但最后一步需要很长时间(我的系统约5分钟).例如,如果我(500, 500, 300)在netcdf文件中保存了一个形状变量,那么相同大小的读取操作只需几秒钟.
有什么方法可以加快速度吗?一个明显的路径是转置数组,以便我选择的索引首先出现.但是在如此大的文件中,这在内存中是不可能的,并且考虑到简单的操作已经花费很长时间,尝试它似乎更慢.我想要的是以Fortran的界面get_vara函数的方式快速读取netcdf文件的一部分.或者某种有效转置阵列的方法.
小智 8
您可以使用nccopy实用程序将netCDF变量转换得太大,以适应内存,这将在此处记录:
http://www.unidata.ucar.edu/netcdf/docs/guide_nccopy.html
我们的想法是通过指定变量所需的块(多维图块)形状来"重新发布"文件.您可以指定用作缓冲区的内存量以及块缓存的使用量,但目前尚不清楚如何在这些用途之间以最佳方式使用内存,因此您可能只需尝试一些示例并计算时间.您可能希望通过指定沿切片的2个大维度具有大量数据并且沿其他维度仅具有少量值的块来"部分转置"它,而不是完全转置变量.