Python NetCDF4库RAM使用情况

时间:2018-04-16 09:36:20

标签: python-3.x memory netcdf

我很难理解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对象只是帮助访问硬盘驱动器上的数据的索引,还是我错过了模块文档中明显的内容?

1 个答案:

答案 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)