Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Python虹膜在读取netcdf数据集时执行速度非常慢_Performance_Netcdf_Python Iris - Fatal编程技术网

Performance Python虹膜在读取netcdf数据集时执行速度非常慢

Performance Python虹膜在读取netcdf数据集时执行速度非常慢,performance,netcdf,python-iris,Performance,Netcdf,Python Iris,我最近从netcdf4切换到iris,以便在Python中读取netcdf文件(我使用的是Python 2.7)。这在许多方面改进了我的代码,但在某些数据集上我遇到了一些性能问题。使用netcdf4读取某些文件(不是全部)通常只需要几秒钟,而使用iris则需要一分钟或几分钟 这是我使用的一个简单测试。netcdf4和iris的第一次读取分别需要4秒和90秒!这大大降低了我的代码性能,因为我通常在一次运行中读取许多文件 从日期时间导入日期时间 进口虹膜 将netCDF4导入为nc nr=3 ifi

我最近从netcdf4切换到iris,以便在Python中读取netcdf文件(我使用的是Python 2.7)。这在许多方面改进了我的代码,但在某些数据集上我遇到了一些性能问题。使用netcdf4读取某些文件(不是全部)通常只需要几秒钟,而使用iris则需要一分钟或几分钟

这是我使用的一个简单测试。netcdf4和iris的第一次读取分别需要4秒和90秒!这大大降低了我的代码性能,因为我通常在一次运行中读取许多文件

从日期时间导入日期时间
进口虹膜
将netCDF4导入为nc
nr=3
ifile='myfile.nc'
打印('虹膜读取\n')
对于范围内的i(nr):
t1=datetime.now()
fh=虹膜负荷(ifile)
data=fh[0]。数据
t2=datetime.now()
差异=(t2-t1).总秒数()
打印({:8.3f}s\n.格式中加载的数据(差异))
打印('NetCDF read\n')
对于范围内的i(nr):
t1=datetime.now()
fh=nc.Dataset(ifile,mode='r')
data=fh.variables.values()[-1][:]
t2=datetime.now()
差异=(t2-t1).总秒数()
打印({:8.3f}s\n.格式中加载的数据(差异))

有人发现了同样的行为吗?这是不是我在iris上做错了什么?

需要记住的一点是,在这种情况下,iris确实比netCDF4做了更多的工作。这是因为它了解CF约定,并将自动识别坐标(维度和辅助坐标),并从文件中读取大量元数据,以生成一个漂亮的立方体,它不仅为您提供裸数据,而且让您能够真正理解它


因此,iris案例中的
fh
内容与netCDF4案例中的内容完全不同。当我在一个测试文件上运行您的程序并在这两种情况下打印
数据时,纯netCDF4实际上提供了一些坐标数据(在我的情况下是1d纬度),而不是实际数据。

需要记住的一点是,在这种情况下,iris确实比netCDF4做了更多的工作。这是因为它了解CF约定,并将自动识别坐标(维度和辅助坐标),并从文件中读取大量元数据,以生成一个漂亮的立方体,它不仅为您提供裸数据,而且让您能够真正理解它


因此,iris案例中的
fh
内容与netCDF4案例中的内容完全不同。当我在测试文件上运行您的程序并在这两种情况下打印
数据时,纯netCDF4实际上提供了一些坐标数据(在我的情况下是1d纬度),而不是实际数据。

据我所知,调用iris多维数据集上的“.data”将立即将数据加载到numpy数组中。对于netcdf,您仅从variables-dict中获得netcdf“Variable”对象。您需要通过添加“[:]”将数据复制到numpy数组。您是对的,我编辑了上面的示例。无论如何,如果我加上[:],netcdf4需要相同的时间,所以问题就在那里..然后我只能推测,您使用iris(索引0)声明的数据与使用netcdf4(索引-1)检索的变量不同。我可以向您保证它是相同的变量。示例中的文件只有一个变量,但netcdf4也将坐标读取为变量(最后一个是真变量)。真正的问题是iris当时在做什么?据我所知,调用iris多维数据集上的“.data”会立即将数据加载到numpy数组中。对于netcdf,您仅从variables-dict中获得netcdf“Variable”对象。您需要通过添加“[:]”将数据复制到numpy数组。您是对的,我编辑了上面的示例。无论如何,如果我加上[:],netcdf4需要相同的时间,所以问题就在那里..然后我只能推测,您使用iris(索引0)声明的数据与使用netcdf4(索引-1)检索的变量不同。我可以向您保证它是相同的变量。示例中的文件只有一个变量,但netcdf4也将坐标读取为变量(最后一个是真变量)。真正的问题是iris当时在做什么?