微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据另一个数据数组 (A)

如何解决根据另一个数据数组 (A)

我正在处理每小时降雨量的 3D 数据数组 A,如下所示:

<xarray.DataArray (time: 1464,lat: 5,lon: 4)>
dask.array<getitem,shape=(1464,5,4),dtype=float32,chunksize=(1,4)>
Coordinates:
  * lat      (lat) float64 34.39 34.38 34.37 34.36 34.35
  * lon      (lon) float64 132.7 132.7 132.7 132.7
  * time     (time) datetime64[ns] 2018-06-01 ... 2018-07-31T23:00:00
Attributes:
    transform:      (0.012500000000000004,0.0,118.0,-0.00833333313486...
    crs:            +init=epsg:4612
    res:            (0.012500000000000004,0.008333333134861565)
    is_tiled:       1
    nodatavals:     (-9999.0,)
    scales:         (1.0,)
    offsets:        (0.0,)
    AREA_OR_POINT:  Area

我想找出特定时间 "cumulative" = 0 的累积降雨量的位置,并创建一个新的 3D 数据数组 B显示 1 if "cumulative"> 1,else 0

这是我迄今为止尝试过的: 我创建了一个name = B 数据数组相同形状的 np zeros (A),并分配了相同的亮度、坐标和属性

B = xr.DataArray(np.zeros(shape=(1464,4)),dims=A.dims,coords = A.coords,attrs = A.attrs       
                      )
print (B)

<xarray.DataArray (time: 1464,lon: 4)>
array([[[0.,0.,0.],[0.,0.]],[[0.,...,0.]]])
Coordinates:
  * lat      (lat) float64 34.39 34.38 34.37 34.36 34.35
  * lon      (lon) float64 132.7 132.7 132.7 132.7
  * time     (time) datetime64[ns] 2018-06-01 ... 2018-07-31T23:00:00
Attributes:
    transform:      (0.012500000000000004,)
    AREA_OR_POINT:  Area

然后,我使用 .where() 函数根据 B 数据数组中的条件更改 A 数据数组中的值。 (这里我的意思是如果10小时的累积降雨量>0,将这10小时的B数据数组的值改为1)

for i in range(1464):
    B.where((A.isel(time=slice(i-9,i+1)).sum() > 0),1)

但此函数不会更改 B 数据数组中的任何内容

我不确定在我的情况下可以使用 .where() 函数

如果您有任何想法,请告诉我!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。