0

我有一个 netcdf 文件,其中包含一个浮点数组(21600、43200)。我不想将整个数组读入 RAM,因为它太大了,所以我使用netCDF4库中的Dataset对象来读取数组。

我想使用 300-400 坐标的两个 1D numpy 数组(x_coords,y_coords)来计算这个数组的子集的平均值。

我认为我不能使用基本索引,因为我拥有的坐标不是连续的。我目前正在做的只是将数组直接输入到对象中,如下所示:

ncdf_data = Dataset(file, 'r')
mean = np.mean(ncdf_data.variables['q'][x_coords, y_coords])

上面的代码对我来说太长了(大约 3-4 秒,具体取决于我使用的坐标),我想以某种方式加快速度。有没有一种pythonic方法可以用来直接从这样的子集中计算平均值而不触发花哨的索引?

4

1 回答 1

1

我知道 h5py 警告花式索引的速度很慢,

docs.h5py.org/en/latest/high/dataset.html#fancy-indexing. 

netcdf 可能有同样的问题。

您可以加载包含所有值的连续切片,并将更快的 numpy 高级索引应用于该子集吗?或者您可能必须使用块。

numpy高级索引比它的基本切片慢,但这仍然比直接从文件中索引的花式索引快很多。

不管你怎么做,np.mean都会对内存中的数据进行操作,而不是直接对文件中的数据进行操作。花式索引的缓慢是因为它必须访问分散在文件中的数据。将数据加载到内存中的数组中并不是很慢的部分。缓慢的部分是从文件中查找和读取。

将文件放在更快的驱动器(例如固态驱动器)上可能会有所帮助。

于 2017-02-23T19:07:09.127 回答