我很难理解Python netCDF4
库在从文件读取数据时如何处理数据存储。似乎几乎什么都没有加载到RAM中。以下是代码示例:
import os
from netCDF4 import Dataset
os.popen('free -m').readlines() # Used memory: 37615 MB
my_ncd = Dataset("my.nc", "r+")
os.popen('free -m').readlines() # Used memory: 37620 MB
Dataset
对象占用5 MB的RAM,因为my.nc
文件大小为997 MB而使我感到困惑。 Dataset
对象只是帮助访问硬盘驱动器上的数据的索引,还是我错过了模块文档中明显的内容?
答案 0 :(得分:1)
如果您使用python -m memory_profiler <script.py> <input_file.nc> <variable_name>
运行以下代码,那么您可以看到实际发生的情况,使用您自己的nc文件,其大小合理。数据未加载到内存的原因在于,这正是为什么开发用于处理大型复杂数据集的HDF5(或基于HDF5的NetCDF4)等文件格式的原因。 HDF5文件可以包含具有数千个变量的TB-s数据。
import sys
from netCDF4 import Dataset
@profile
def openthis(infile, invar):
ff = Dataset(infile)
abc = ff.variables[invar][:]
if __name__ == "__main__":
file_name = sys.argv[1]
variable_name = sys.argv[2]
openthis(file_name, variable_name)