我有一个名为 的数据集对象(通过 netCDF 文件导入xarray.open_dataset)ds。它包含一个名为variable1和的变量latitude和longitude维度。
>>>ds
<xarray.Dataset>
Dimensions: (latitude: 681, longitude: 841)
Coordinates:
* latitude (latitude) float64 -10.0 -10.05 -10.1 ... -43.9 -43.95 -44.0
* longitude (longitude) float64 112.0 112.0 112.1 112.2 ... 153.9 153.9 154.0
Data variables:
variable1 (latitude, longitude) float32 ...
Run Code Online (Sandbox Code Playgroud)
我有一个timeDataArray 对象,其坐标从2017-01-01到2017-13-31。
>>>times = pd.date_range("2017/01/01","2018/01/01",freq='D',closed='left')
>>>time_da = xr.DataArray(times, [('time', times)])
>>>time_da
<xarray.DataArray (time: 365)>
array(['2017-01-01T00:00:00.000000000', '2017-01-02T00:00:00.000000000',
'2017-01-03T00:00:00.000000000', ..., '2017-12-29T00:00:00.000000000',
'2017-12-30T00:00:00.000000000', '2017-12-31T00:00:00.000000000'],
dtype='datetime64[ns]') …Run Code Online (Sandbox Code Playgroud) 我有一个来自 ERA5 的 2m 温度 netcdf 文件,该文件从 2000 年到 2019 年的 04 到 10 个月,总共提供 13680 个时间步长和 61x161 经纬度维度。我想分别计算每年所有每日时间步长的月平均值。例如,我们将获得 2000 年 4 月、2000 年 5 月等数据的月平均值。我已尝试使用 xarray resample 使用以下代码,但出现两个问题。
\n这是我\xe2\x80\x99m 谈论的内容:
\nimport xarray as xr\nds = xr.open_dataset(netcdf)\nmonthly_data=ds.resample(time='1M').mean()\nRun Code Online (Sandbox Code Playgroud)\n我们可以查看显示每月时间步长的时间戳,包括不相关的月份。
\nprint(np.array(monthly_data.time))\narray(['2000-04-30T00:00:00.000000000', '2000-05-31T00:00:00.000000000',\n '2000-06-30T00:00:00.000000000', '2000-07-31T00:00:00.000000000',\n '2000-08-31T00:00:00.000000000', '2000-09-30T00:00:00.000000000',\n '2000-10-31T00:00:00.000000000', '2000-11-30T00:00:00.000000000',\n '2000-12-31T00:00:00.000000000', '2001-01-31T00:00:00.000000000',\nRun Code Online (Sandbox Code Playgroud)\n为了验证温度的内容,我将数据转换为数据帧。
\ntemp_ar = np.array(monthly_data.t2m) \nprint(pd.DataFrame(temp_ar[0,:,:]).head())\n 0 1 2 ... 158 159 160\n0 270.940613 270.911652 270.926727 ... NaN …Run Code Online (Sandbox Code Playgroud) 我有一个 NetCDF 文件列表,我想用该xarray.open_mfdataset函数打开它们。
这通常是微不足道的,但是我遇到了一个问题,因为我尝试打开的文件中不包含任何“时间”维度:
data
Out[51]:
<xarray.Dataset>
Dimensions: (lat: 850, lon: 1500)
Coordinates:
* lat (lat) float64 54.98 54.94 54.9 54.86 ... 21.14 21.1 21.06 21.02
* lon (lon) float64 -126.0 -125.9 -125.9 -125.9 ... -66.1 -66.06 -66.02
Data variables:
Data (lat, lon) float32 ...
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 open_mfdataset 打开文件列表时,我当然会收到错误:
xr.open_mfdataset(files)
ValueError: Could not find any dimension coordinates to use to order the datasets for concatenation
Run Code Online (Sandbox Code Playgroud)
不过,我确实有一个与每个文件对应的日期列表:
dates
Out[54]:
array([datetime.datetime(2009, 1, 1, 0, 0),
datetime.datetime(2009, 1, 2, 0, 0),
datetime.datetime(2009, …Run Code Online (Sandbox Code Playgroud) 我想使用metpyERA5 每小时再分析数据来计算近地表(即 2m)比湿度。我metpy昨天刚刚通过 pip 在本地安装,所以我假设我的代码是最新的。我的问题是我不断遇到以下错误。
这是我目前的代码:
# import modules
import numpy as np
import xarray as xr
from metpy.units import units
import metpy.calc as mpcalc
# read data
d2m = xr.open_dataset('netcdf/ERA5_dewpt2m_1992.nc')
sp = xr.open_dataset('netcdf/ERA5_pres_1992.nc')
# assign units (approach 1)
#d2m = d2m*units.kelvin
#sp = sp*units.pascal
# assign units (approach 2)
d2m = units.Quantity(d2m, "kelvin")
sp = units.Quantity(sp, "pascal")
# calculate specific humidity
aqh2m = mpcalc.specific_humidity_from_dewpoint(sp, d2m)
Run Code Online (Sandbox Code Playgroud)
如果我忽略“单位”步骤,那么该函数当然会抱怨缺少单位。请注意,我尝试了两种不同的方法来处理上面的单元,但它们都不起作用。
如果我尝试这种方法:
# assign units (approach 1)
d2m = d2m*units.kelvin …Run Code Online (Sandbox Code Playgroud) 在完成 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 …Run Code Online (Sandbox Code Playgroud) 这可能是最基本的问题,但我就是找不到解决方案。
我有两个包含风数据的不同 xarray。两个 xarray 都有维度(时间:60,普列夫:19,纬度:90)。我现在需要在所有维度上获取两个 xarray 之间的差异,以找到两个场景之间的异常。
我认为 xarray.DataArray.diff 函数仅用于计算沿一个 xarray 的轴的差异(而不是计算两个 xarray 之间的差异)。
所以,我尝试简单地使用
diff = wind1_xarray - wind2_xarray
Run Code Online (Sandbox Code Playgroud)
也
diff = (wind1_xarray - wind2_xarray).compute()
Run Code Online (Sandbox Code Playgroud)
然而,这两种方法都给了我一个具有尺寸的xarray(时间:60,plev:0,lat:90)。为什么在计算差异时会丢失压力水平?
如何计算两个 xarray 在所有维度上的差异而不丢失一维?
感谢大家
我正在尝试对 Netcdf 文件中的气候数据进行线性回归。数据如下所示..
print(dsloc_lvl)
<xarray.DataArray 'sla' (time: 10227)>
array([0.0191, 0.0193, 0.0197, ..., 0.0936, 0.0811, 0.0695])
Coordinates:
latitude float32 21.62
* time (time) datetime64[ns] 1993-01-01 1993-01-02 ... 2020-12-31
longitude float32 -89.12
Attributes:
ancillary_variables: err_sla
comment: The sea level anomaly is the sea surface height abo...
grid_mapping: crs
long_name: Sea level anomaly
standard_name: sea_surface_height_above_sea_level
units: m
_ChunkSizes: [ 1 50 50]``
Run Code Online (Sandbox Code Playgroud)
我一直在使用 Xarray 库来处理数据,因此我使用了 xarray.DataArray.polyfit 和 xarray.DataArray.polyval。绘制结果时,回归线看起来不错。
然而,当研究系数时,我注意到它们非常小。我将系数与 np.polyfit 方法进行了比较,该方法与预期一致。我认为这是因为对于 np. ppolyfit 我使用 date2num 转换日期
x1=mdates.date2num(dsloc_lvl['time'])
Out: array([ 8401., 8402., 8403., ..., …Run Code Online (Sandbox Code Playgroud) 是否存在扩展xarray.DataArray对象尺寸(和坐标)的方法?
我想获得类似于np.expand_dims的内容,同时为新的expand定义新的尺寸和坐标变量DataArray。
使用DataArray.assign_coords()I可以创建一个新的坐标变量,但是不会使用新轴扩展数组本身。
我有一个xarray数据集,其中一些变量具有比必要更多的维度(例如,"纬度"和"经度"变量也随时间变化的3D数据集).如何删除额外的尺寸?
例如,在下面的数据集中,"bar"是沿轴x和y轴的2D变量,沿轴具有恒定的vaues x.如何x从'bar'中删除尺寸而不是'foo'?
>>> ds = xr.Dataset({'foo': (('x', 'y'), np.random.randn(2, 3))},
{'x': [1, 2], 'y': [1, 2, 3],
'bar': (('x', 'y'), [[4, 5, 6], [4, 5, 6]])})
>>> ds
<xarray.Dataset>
Dimensions: (x: 2, y: 3)
Coordinates:
* x (x) int64 1 2
* y (y) int64 1 2 3
bar (x, y) int64 4 5 6 4 5 6
Data variables:
foo (x, y) float64 -0.9595 0.6704 -1.047 0.9948 0.8241 1.643
Run Code Online (Sandbox Code Playgroud) 因此,我正在尝试读取大量包含水文数据的相对较大的netCDF文件。NetCDF文件全部如下所示:
<xarray.Dataset>
Dimensions: (feature_id: 2729077, reference_time: 1, time: 1)
Coordinates:
* time (time) datetime64[ns] 1993-01-11T21:00:00
* reference_time (reference_time) datetime64[ns] 1993-01-01
* feature_id (feature_id) int32 101 179 181 183 185 843 845 847 849 ...
Data variables:
streamflow (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
q_lateral (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
velocity (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
qSfcLatRunoff (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
qBucket (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
qBtmVertRunoff (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
Attributes:
featureType: timeSeries
proj4: +proj=longlat +datum=NAD83 +no_defs
model_initialization_time: 1993-01-01_00:00:00
station_dimension: feature_id
model_output_valid_time: 1993-01-11_21:00:00
stream_order_output: …Run Code Online (Sandbox Code Playgroud) python-xarray ×10
python ×6
netcdf ×4
numpy ×3
metpy ×2
dask ×1
difference ×1
dimension ×1
dimensions ×1
era5 ×1