首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除x数组数据集的值和扁平DataArrays

删除x数组数据集的值和扁平DataArrays
EN

Stack Overflow用户
提问于 2018-05-17 21:09:52
回答 1查看 2.9K关注 0票数 1

是否可以删除包含在xarray数据集中的DataArrays值,以便在下面的示例代码中将xr_dataset转换为xr_flat

代码语言:javascript
复制
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)})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-17 21:33:32

您可以使用xarray的stackwhere方法来完成这一任务。为了与您的示例保持一致,我还删除了x/y坐标,但这不是严格要求的。关键部分是:

  1. 使用堆栈将x/y简化为dim_0
  2. 使用wheredrop=True掩蔽并只选择有限元素

举个例子,从你停止的地方开始.

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50400543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档