这似乎是一个非常基本的操作,但我不知道如何使用 xarray 文档来完成它。
我有一个 xarray 数据集:
dss
<xarray.DataArray (y: 1000, x: 1334)>
dask.array<shape=(1000, 1334), dtype=uint8, chunksize=(222, 58)>
Coordinates:
band int32 1
* y (y) float64 2.218e+06 2.218e+06 2.218e+06 2.218e+06 2.218e+06 ...
* x (x) float64 1.891e+06 1.891e+06 1.891e+06 1.891e+06 1.891e+06 ...
Attributes:
transform: (30.0, 0.0, -2493045.0, 0.0, -30.0, 3310005.0, 0.0, 0.0, 1.0)
crs: +ellps=GRS80 +lat_0=23 +lat_1=29.5 +lat_2=45.5 +lon_0=-96 +n...
res: (30.0, 30.0)
is_tiled: 1
nodatavals: (nan,)
和一个具有正确维度的 numpy 数组:
print(np.shape(nmap))
(1000, 1334)
nmap
array([[ 0.15, 0.1 , 0.15, ..., 0.05, 0.05, 0.02],
[ 0.15, 0.1 , 0.05, ..., 0.05, 0.05, 0.05],
[ 0.1 , 0.15, 0.15, ..., 0.05, 0.05, 0.02],
...,
[ 0.02, 0.02, 0.02, ..., 0.02, 0.02, 0.02],
[ 0.02, 0.09, 0.09, ..., 0.02, 0.02, 0.02],
[ 0.02, 0.09, 0.09, ..., 0.02, 0.02, 0.02]])
我想将数组添加到数据集中。我的最终目标是使用 x
和 y
进行空间插值,以在新网格上提取 nmap
的插值。
最佳答案
您想创建一个包含您的 numpy 数组 nmap 的数据集吗?
或者你想做一个算术dss + nmap
?
对于前一种情况,
您需要先从 dss
中创建一个 Dataset
并将 nmap
分配给它,
因为您的 dss
不是 Dataset
而是 DataArray
。
要从DataArray
生成Dataset
,您可以传递一个将数组名称映射到DataArray 对象的字典。
如果您的数组不是 DataArray
而是 numpy 数组或 dask 数组,则您需要一个元组 (dimensions, array, [attribute])。
ds = xr.Dataset({'dss': dss, 'nmap': (('y', 'x'), nmap)})
或者另一种做同样事情的方法是
ds = xr.Dataset({})
ds['dss'] = ds
ds['nmap'] = (('y', 'x'), nmap)
对于后一种情况,只需做
dss + nmap
关于python - 将 numpy 数组作为变量添加到 Xarray 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196438/