Python-iris在读取netcdf数据集时表现非常缓慢

时间:2019-05-31 14:21:52

标签: performance netcdf python-iris

我最近从netcdf4切换到了虹膜,用于在Python中读取netcdf文件(我正在使用Python 2.7)。从很多方面来说,这都改进了我的代码,但是我在某些数据集上遇到了性能问题。过去,使用netcdf4读取某些文件(不是全部文件)仅需要几秒钟,而使用iris则需要一分钟或更多分钟。

这是我使用的一个简单测试。使用netcdf4的第一个读数需要4秒,而使用虹膜的则大约需要90秒!这会大大降低我的代码性能,因为我通常一次运行会读取许多文件。

from datetime import datetime
import iris
import netCDF4 as nc

nr = 3
ifile = 'myfile.nc'

print('IRIS read\n')
for i in range(nr):
    t1 = datetime.now()
    fh = iris.load(ifile)
    data = fh[0].data
    t2 = datetime.now()

    diff = (t2-t1).total_seconds()
    print('Data loaded in {:8.3f} s\n'.format(diff))

print('NetCDF read\n')
for i in range(nr):
    t1 = datetime.now()
    fh = nc.Dataset(ifile, mode='r')
    data = fh.variables.values()[-1][:]
    t2 = datetime.now()

    diff = (t2-t1).total_seconds()
    print('Data loaded in {:8.3f} s\n'.format(diff))

有人发现了相同的行为吗?我在用虹膜做错事了吗?

1 个答案:

答案 0 :(得分:0)

要记住的一件事是,在这种情况下,虹膜实际上比netCDF4做更多的工作。这是因为它了解CF约定,并会自动识别坐标(维和辅助坐标)并从文件中读取很多元数据,以生成一个漂亮的多维数据集,该多维数据集不仅为您提供裸数据,而且使您可以真正理解它。

结果,虹膜情况下fh的内容与netCDF4情况下的根本不同。在两种情况下,当我在测试文件上运行程序并打印data时,纯netCDF4实际上都提供了一些坐标数据(在我的情况下为1d纬度),而不是实际数据。

相关问题