【发布时间】:2016-03-13 14:25:18
【问题描述】:
我需要能够在 python 中快速读取大量 netCDF 变量(每个文件 1 个变量)。我发现 netCDF4 库中的 Dataset 函数与读取其他语言(例如 IDL)的实用程序相比相当慢。
我的变量的形状为 (2600,5200),类型为 float。它们对我来说似乎并不大(文件大小 = 52Mb)。
这是我的代码:
import numpy as np
from netCDF4 import Dataset
import time
file = '20151120-235839.netcdf'
t0=time.time()
openFile = Dataset(file,'r')
raw_data = openFile.variables['MergedReflectivityQCComposite']
data = np.copy(raw_data)
openFile.close()
print time.time-t0
读取一个变量(一个文件)大约需要 3 秒。我认为主要的放缓是 np.copy。 raw_data 是 <type 'netCDF4.Variable'>,因此是副本。这是在 python 中进行 netCDF 读取的最佳/最快方法吗?
谢谢。
【问题讨论】:
-
Numpy 的强大之处在于,您可以通过它保留的有关数据的元数据创建对内存中现有数据的视图。因此,通过指针,副本总是比视图慢。正如@JCOidl 所说,尚不清楚为什么您不只使用 raw_data = openFile.variables['MergedReflectivityQCComposite'][:]
-
这个简单的步骤将读取速度提高了一个数量级。谢谢!我将尝试更多地利用 Numpy 的指针。你知道一个很好的参考资料来解释这个概念吗(这里是n00b)?
-
我不确定它在你的情况下是否更快,但我强烈建议使用
xarray- 它在更高级别处理网格数据,并使编码更好。如果您正在处理大型数组,它也可能会更快。有关性能的讨论,请参见 stackoverflow.com/questions/47180126/…。
标签: python performance netcdf