python - 使用 scipy 从 nc 文件中提取数据

标签 python scipy netcdf

我正在尝试从 nc 文件中提取某些参数的值,但我的代码不适用于 slp 参数,尽管它适用于其他参数。该代码显示 slp 为负值,这意味着数据导入不正确。

我使用了这个脚本:

import numpy as np
import matplotlib as mpl
mpl.use('agg')
from mpl_toolkits.basemap import Basemap
from scipy.io import netcdf_file as nc
from pylab import *

from datetime import datetime
from datetime import timedelta
from glob import glob


files1 = glob('n1*nc')
files1.sort()
MVAL1 = -32767
for item in files1:
  clf()
  f1 = nc(item)
  times=f1.variables['time'] 
  lon = f1.variables['longitude'].data
  lat = f1.variables['latitude'].data
  slp = f1.variables['msl'].data   
  # to convert to hpa
  slp = slp*0.01
  dims = slp.shape                   
  print slp.shape, np.max(slp), np.min(slp)

结果是

(73, 121) 327.67 -327.66

当我在 Panoply 中检查它时,最小值和最大值是不同的。

如何解决这个问题?

最佳答案

我怀疑 Panoply 会自动将 scale_factoradd_offset 属性应用于 short 数据,并将结果以 float 形式呈现给您物理单位(Pa)。默认情况下,scipi.io 不应用这些属性,因此您需要手动执行此操作:

slp = f1.variables['msl']
fslp = slp[:]*slp.scale_factor + slp.add_offset

在您的情况下,数据的可能范围约为 -32766*scale + offset = 99081.Pa 到 32767*scale + offset = 101718.Pa。

较高级别的约定感知包(例如 Panoply、Ferret)自动应用这些打包属性,而较低级别的接口(interface)(例如 Scipy.IO)则将其留给用户,这是很常见的。您可以考虑使用 NetCDF4 Python package相反,它会自动处理打包和填充值。

关于python - 使用 scipy 从 nc 文件中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847737/

相关文章:

variables - 在两个不同的 netcdf 文件中减去变量

python - 使用 geopandas 从 NetCDF 数据中提取国家/地区

python - WSO2 Python 脚本中介器

python - Unicode re.sub() 不适用于\g<0>(第 0 组)

python - scipy 和 numpy 中切比雪夫多项式实现的区别

scipy - scipy稀疏矩阵的元素明智exp()

python - 如何将经纬度距离转换为米?

python - Python 解释器如何在动态类型中工作?

python - 一个人可以在 scikit-learn 管道中同时训练估计器吗?

python - 使用 Julia NetCDF.jl 包将值附加到 netCDF4 变量