布尔值分配xarray python

时间:2019-06-09 10:16:35

标签: python python-3.x numpy python-xarray

如果满足特定条件,我需要分配一个xr.DataArraygt)的值。如果满足其他条件,则另一个xr.DataArraylt)的值。我希望它可以扩展(可能有两个以上的条件可能无法涵盖所有​​可能性)。

理想情况下,我也想在xarray中完成所有操作。

我目前有一个解决方案,可以写出numpy,并使用在那里建立的掩码数组功能。

这是一个最小的可复制示例

import pandas as pd
import numpy as np
import xarray as xr

time = pd.date_range('2010-01-01','2011-12-31',freq='M')
lat = np.linspace(-5.175003, -4.7250023, 10)
lon = np.linspace(33.524994, 33.97499, 10)
precip = np.random.normal(0, 1, size=(len(time), len(lat), len(lon)))

ds = xr.Dataset(
    {'precip': (['time', 'lat', 'lon'], precip)},
    coords={
        'lon': lon,
        'lat': lat,
        'time': time,
    }
)

# DUMMY DataArray's for filling in gt / lt values
lt = xr.full_like(da, -100)
gt = xr.full_like(da, 100)

我想要什么

DataArray小于1('-100')时,我想要一个lt,其值来自da.values,而{{1} }})时gt大于1。

100

我尝试过的事情:

  • 使用da.values语法从另一个(相同的<xarray.Dataset> Dimensions: (lat: 10, lon: 10, time: 24) Coordinates: * lon (lon) float64 33.52 33.57 33.62 33.67 ... 33.82 33.87 33.92 33.97 * lat (lat) float64 -5.175 -5.125 -5.075 -5.025 ... -4.825 -4.775 -4.725 * time (time) datetime64[ns] 2010-01-31 2010-02-28 ... 2011-12-31 Data variables: out (time, lat, lon) float64 -100.0 -100.0 -100.0 ... -100.0 -100.0 .where)对象中进行选择
  • 转换为size
  • 使用xr.Dataset语法进行重组
  • 读回np.ma.array
np.ma.array

这看起来像:

Example output

如果可能的话,我希望有一种方法可以有效地/自然地在xarray中执行此操作。

0 个答案:

没有答案