删除值并展平 xarray 数据集的 DataArrays
Delete values and flatten DataArrays of xarray Dataset
是否可以删除 xarray 数据集中包含的 DataArray 的值,以便 xr_dataset
在下面的示例代码中转换为 xr_flat
?
import xarray as xr
import numpy as np
n = np.nan
a = np.array([[n,n,1],
[1,2,2],
[2,n,n]], dtype='float32')
b = np.random.rand(3,3)
xr_dataset = xr.Dataset({'a': xr.DataArray(a, dims=['x', 'y']),
'b': xr.DataArray(b, dims=['x', 'y'])})
a_flat = a[np.isfinite(a)]
b_flat = b[np.isfinite(a)]
xr_flat = xr.Dataset({'a': xr.DataArray(a_flat),
'b': xr.DataArray(b_flat)})
您可以使用 xarray 的 stack
和 where
方法执行此操作。为了与您的示例保持一致,我还删除了 x/y 坐标,但这并不是严格要求的。关键部分是:
- 使用堆栈将
x
/y
变暗为 dim_0
- 使用
where
和 drop=True
来屏蔽并且 select 仅使用有限元
这是一个示例,从您离开的地方开始...
In [2]: ds_stack = xr_dataset.stack(dim_0=('x', 'y'))
In [3]: ds_stack = ds_stack.reset_index('dim_0').drop(['x', 'y'])
In [4]: ds_stack.where(np.isfinite(ds_stack['a']), drop=True)
Out[4]:
<xarray.Dataset>
Dimensions: (dim_0: 5)
Dimensions without coordinates: dim_0
Data variables:
a (dim_0) float32 1.0 1.0 2.0 2.0 2.0
b (dim_0) float64 0.8642 0.05446 0.3728 0.7797 0.9501
In [5]: xr_flat
Out[5]:
<xarray.Dataset>
Dimensions: (dim_0: 5)
Dimensions without coordinates: dim_0
Data variables:
a (dim_0) float32 1.0 1.0 2.0 2.0 2.0
b (dim_0) float64 0.8642 0.05446 0.3728 0.7797 0.9501
是否可以删除 xarray 数据集中包含的 DataArray 的值,以便 xr_dataset
在下面的示例代码中转换为 xr_flat
?
import xarray as xr
import numpy as np
n = np.nan
a = np.array([[n,n,1],
[1,2,2],
[2,n,n]], dtype='float32')
b = np.random.rand(3,3)
xr_dataset = xr.Dataset({'a': xr.DataArray(a, dims=['x', 'y']),
'b': xr.DataArray(b, dims=['x', 'y'])})
a_flat = a[np.isfinite(a)]
b_flat = b[np.isfinite(a)]
xr_flat = xr.Dataset({'a': xr.DataArray(a_flat),
'b': xr.DataArray(b_flat)})
您可以使用 xarray 的 stack
和 where
方法执行此操作。为了与您的示例保持一致,我还删除了 x/y 坐标,但这并不是严格要求的。关键部分是:
- 使用堆栈将
x
/y
变暗为dim_0
- 使用
where
和drop=True
来屏蔽并且 select 仅使用有限元
这是一个示例,从您离开的地方开始...
In [2]: ds_stack = xr_dataset.stack(dim_0=('x', 'y'))
In [3]: ds_stack = ds_stack.reset_index('dim_0').drop(['x', 'y'])
In [4]: ds_stack.where(np.isfinite(ds_stack['a']), drop=True)
Out[4]:
<xarray.Dataset>
Dimensions: (dim_0: 5)
Dimensions without coordinates: dim_0
Data variables:
a (dim_0) float32 1.0 1.0 2.0 2.0 2.0
b (dim_0) float64 0.8642 0.05446 0.3728 0.7797 0.9501
In [5]: xr_flat
Out[5]:
<xarray.Dataset>
Dimensions: (dim_0: 5)
Dimensions without coordinates: dim_0
Data variables:
a (dim_0) float32 1.0 1.0 2.0 2.0 2.0
b (dim_0) float64 0.8642 0.05446 0.3728 0.7797 0.9501