如何解决根据另一个数据数组 (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)
我不确定在我的情况下可以使用 .where()
函数。
如果您有任何想法,请告诉我!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。