- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
完成 MetPy 横截面示例后,我尝试将该示例推广到 NCEP NAM-12km GRIB2 文件,但未成功。通过将我的文件的 DataArray 与示例文件(netCDF 文件)进行比较,我发现 xarray.open_dataset() 没有生成 x 和 y 坐标。它也没有在输入 GRIB 文件中找到足够的信息来生成 metpy_crs 坐标。我尝试将 GRIB 文件转换为 netCDF,但这并没有解决问题。
即使将输入文件视为非 CF 投诉,我发现我无法分配 x 和 y 坐标。通过检查横截面示例中使用的 netCDF 文件,可以清楚地看到 x 和 y 数组表示具有 GeoX 和 GeoY 坐标轴类型的空间网格。然而,我不清楚的是如何为我的文件创建一个类似的数组。
纬度和经度数组不适合手动折叠它们的尝试(如沿行选择纬度的模式,这是我创建适当坐标向量的尝试之一。)
如果您能协助解决此问题,我们将不胜感激。谢谢!
以下是我正在运行的代码。
import sys
# pygrib is installed to the "herbie" environment, so we add the path
# to this so we can load those packages. Pygrib is used to get the
# complete set of keys for a message so we can try to see what is
# available.
sys.path.append('/miniconda3/envs/herbie/lib/python3.8/site-packages')
import pygrib
%matplotlib inline
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import numpy as np
import xarray as xr
import metpy.calc as mpcalc
from metpy.cbook import get_test_data
from metpy.interpolate import cross_section
# NAM 218 AWIPS Grid - CONUS
# (12-km Resolution; full complement of pressure level fields and some surface-based fields)
# https://nomads.ncep.noaa.gov/pub/data/nccf/com/nam/prod/nam.20210925/
filename = '/NAM/nam.t00z.awphys00.tm00.grib2'
# NCEP GRIB files have non-unique keys, so pick from recommended list to filter
# --Temperature and Pressure levels
# Non-CF Compliant so don't use .parse_cf()
data = xr.open_dataset(filename, engine="cfgrib",filter_by_keys={'typeOfLevel': 'isobaricInhPa','name':'Temperature'})
# We are missing a mapping projection, so add it:
data1=data.metpy.assign_crs(
grid_mapping_name='lambert_conformal_conic',
latitude_of_projection_origin=35,
longitude_of_central_meridian=-100,
standard_parallel=(30,60),
earth_radius=6371229.0)
print(data1)
#-------------------------- Print Output ---------------------------------
#<xarray.Dataset>
#Dimensions: (isobaricInhPa: 39, y: 428, x: 614)
#Coordinates:
# time datetime64[ns] 2021-09-25
# step timedelta64[ns] 00:00:00
# * isobaricInhPa (isobaricInhPa) float64 1e+03 975.0 950.0 ... 75.0 50.0
# latitude (y, x) float64 ...
# longitude (y, x) float64 ...
# valid_time datetime64[ns] 2021-09-25
# metpy_crs object Projection: lambert_conformal_conic
#Dimensions without coordinates: y, x
#Data variables:
# t (isobaricInhPa, y, x) float32 ...
#Attributes:
# GRIB_edition: 2
# GRIB_centre: kwbc
# GRIB_centreDescription: US National Weather Service - NCEP
# GRIB_subCentre: 0
# Conventions: CF-1.7
# institution: US National Weather Service - NCEP
# history: 2021-09-28T22:45 GRIB to CDM+CF via cfgrib-0.9.9...
# Missing x- and y-coordinates
#----------------------------------------------------------------------
# Try to add coordinates for y and x
data2=data1.metpy.assign_y_x()
# Output Error:
# ValueError: Projected y and x coordinates cannot be collapsed to 1D within tolerance. Verify that your latitude and longitude coordinates correspond to your CRS coordinate.'''
最佳答案
因此您包含的错误消息指出了这里的问题:
Verify that your latitude and longitude coordinates correspond to your CRS coordinate.
使用提供的 CRS 参数,计算出的 x/y 坐标似乎不是一维值,这使得它们的使用存在问题,并表明投影参数通常不太正确。
我不确定您在 assign_crs
中使用的参数来自何处,但它们对于 NAM 218 grid 是不正确的.你想要的参数是:
grid_mapping_name = "lambert_conformal_conic",
latitude_of_projection_origin = 25.0,
longitude_of_central_meridian = 265.0,
standard_parallel = 25.0,
earth_radius = 6371229.0
获取这些信息的最可靠方法是使用 pygrib
读取消息。假设文件中的所有 GRIB 消息都来自相同的坐标系(这些 NWS 文件很可能就是这种情况),您可以这样做:
import pygrib
from pyproj import CRS
grib = pygrib.open(filename)
msg = grib.message(1)
data1 = data.metpy.assign_crs(CRS(msg.projparams).to_cf())
data2 = data1.metpy.assign_y_x()
来自 pygrib
的消息提供了适当的 pyproj
坐标,可以很容易地将其映射到必要的 Cf 参数。
如果 cfgrib
可以在本地提供这些参数,那就太好了,但目前情况并非如此。有一个 open issue添加这个。
关于python-xarray - 无法将 y 和 x 坐标分配给 xarray.DataArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69370659/
假设我有以下二维数组 >>> import numpy as np >>> budgets = np.array([ [np.nan, 450.], [500. , 10
我正在尝试读取单个 WRF 的时间序列输出变量。时间序列是分布式的,每个文件一个时间戳,跨越 5000 多个 netCDF 文件。每个文件包含大约 200 个变量。 有没有办法只为我感兴趣的变量调用
我有一个相当大的 xr.Dataset,其中包含大约 20 个数据变量。我只对保留其中两个感兴趣。我看到 xr.Dataset.drop带有数据集的删除变量。 我正在寻找保留变量的语法。我尝试了 f[
我正在尝试计算 xarray 数据集中时间维度子集的每月气候。时间是使用 datetime64 定义的。 如果我想使用整个时间序列,这很好用: monthly_avr=ds_clm.groupby('
我有一个空间数据的 pandas 数据框,我想将其转换为 netCDF。我找到了 xarray 并将我的数据帧转换为 xarray 数据集的方法: # create xray Dataset from
我有一个名为 rio 的 DataArray 对象。 In [59]: rio Out[59]: array([[[0, 0, ..., 0, 0], [0, 0, ..., 0,
我目前正在尝试将一个大的多维数组 (>5 GB) 加载到 python 脚本中。由于我将数组用作机器学习模型的训练数据,因此以小批量高效加载数据非常重要,但要避免将整个数据集加载到内存中一次。 我的想
假设我有一个 dataset类型 xarray.Dataset .我有一个名为 name 的维度,(由 DataArray 中的所有 Dataset 共享,但我认为这对这个问题并不重要,)我想选择一个
我想读入 https://hrrrzarr.s3.amazonaws.com/index.html#sfc/20210208/20210208_00z_anl.zarr/ 的远程 zarr 存储。 z
我想获取栅格(卫星图像)数据,并构建一个Dataset 或DataArray,以加快我的图像处理速度(我必须处理多-波段,多日期卫星图像很多)。 数据来自每个图像日期的单独波段,我了解如何将每个波段日
所以我有 3 个 netcdf4 文件(每个大约 90 MB),我想使用包 xarray 将它们连接起来。每个文件都有一个变量 (dis),以 0.5 度分辨率(纬度、经度)表示 365 天(时间)。
对于我的数据数组,我有坐标经度、纬度和时间。我只想沿纬度反转数组,以便 [90, 85, ..., -85, -90]变成 [-90, -80, ..., 85, 90] . 最佳答案 同意@jham
完成 MetPy 横截面示例后,我尝试将该示例推广到 NCEP NAM-12km GRIB2 文件,但未成功。通过将我的文件的 DataArray 与示例文件(netCDF 文件)进行比较,我发现 x
我正在使用 xarray.apply_ufunc() 将函数应用于 xarray.DataArray .它适用于某些 NetCDF,但在尺寸、坐标等方面似乎具有可比性的其他 NetCDF 会失败。但是
是否也可以创建一个核外 DataArray,并使用 xarray 将其逐块写入 NetCDF4 文件? 例如,当维度更大时,我希望能够以核外方式执行此操作,因此我无法将整个数组存储在内存中: num_
我有一个数据数组arr,坐标为“时间”。到达: array([244.40161, 244.39998, ..., 244.40936, 244.40549], dtype=float32)
我有一个数据数组arr,坐标为“时间”。到达: array([244.40161, 244.39998, ..., 244.40936, 244.40549], dtype=float32)
我是新手,我使用的是XARRAY。我的netcdf文件包含时间为‘天数自0001-01-01 00:00:00’的数据,日历类型为Julian。有谁知道将时间转换成标准日历的简单方法吗?。提前感谢:)
我是新手,我使用的是XARRAY。我的netcdf文件包含时间为‘天数自0001-01-01 00:00:00’的数据,日历类型为Julian。有谁知道将时间转换成标准日历的简单方法吗?。提前感谢:)
我是新手,我使用的是XARRAY。我的netcdf文件包含时间为‘天数自0001-01-01 00:00:00’的数据,日历类型为Julian。有谁知道将时间转换成标准日历的简单方法吗?。提前感谢:)
我是一名优秀的程序员,十分优秀!