我min/max从 NetCDF 文件中提取变量数据值的常用方法与scipy.io.netcdf.
我正在处理相对较大的海洋模型输出文件(来自 ROMS),在给定的地图区域(夏威夷)上具有多个深度级别。当这些在 NetCDF-3 中时,我使用了scipy.io.netcdf.
现在这些文件在 NetCDF-4(“经典”)中,我不能再使用scipy.io.netcdf,而是切换到使用 netCDF4 Python 模块。但是,缓慢是一个问题,我想知道是否有更有效的方法来提取变量的数据范围(最小和最大数据值)?
这是我使用 scipy 的 NetCDF-3 方法:
import scipy.io.netcdf
netcdf = scipy.io.netcdf.netcdf_file(file)
var = netcdf.variables['sea_water_potential_temperature']
min = var.data.min()
max = var.data.max()
Run Code Online (Sandbox Code Playgroud)
这是我使用 netCDF4 的 NetCDF-4 方法:
import netCDF4
netcdf = netCDF4.Dataset(file)
var = netcdf.variables['sea_water_potential_temperature']
var_array = var.data.flatten()
min = var_array.data.min()
max = var_array.data.max()
Run Code Online (Sandbox Code Playgroud)
显着的区别是我必须首先展平 netCDF4 中的数据数组,而这个操作显然会减慢速度。
有没有更好/更快的方法?
测量海浪周期的变量的“单位”属性以“秒”为单位。这不是日期时间字段,但 xarray 会自动将此变量提取为 timedelta64。由于单位不是“自...以来的秒数”,我认为 xarray 应该将其视为普通的 float32 数据数组,但显然并非如此。有没有办法让我告诉 xarray 将波浪周期变量作为 float32 摄取,或者在摄取后将它们从 timedelta64 转换回原始值?我仍然希望它将“时间”变量转换为 timedelta64,所以我不想关闭整个数据集的翻译,而只是针对特定变量(Tper、sper、wper)。
以下是我在 TDS 服务器中的波浪预测中使用的基本 OPeNDAP URL:
建议?谢谢!
您可以使用此处的 OPeNDAP 页面查看类似“ncdump”的输出:
或者您可以在 OPeNDAP URL 上运行 ncdump,如下所示:
结果如下:
netcdf WaveWatch_III_Hawaii_Regional_Wave_Model_best {
dimensions:
lat = 101 ;
lon = 141 ;
time = 54453 ;
z = 1 ;
variables:
float lon(lon) ;
lon:units = "degrees_east" ;
lon:long_name = "longitude" ;
lon:standard_name = "longitude" ;
lon:short_name = "lon" ;
lon:axis = "x" ;
lon:_CoordinateAxisType …Run Code Online (Sandbox Code Playgroud)