这与早期的thread密切相关,但我在用3d数组再现解决方案时遇到了一些困难。我的3d阵列有一个时间坐标和两个空间坐标。每个空间坐标本身就是沿空间维的指数的二维函数,就像当空间网格是曲线时的(经度、纬度)值一样。
目标:每次,我想找出坐标对应于空间中的最大值。以下是一些代码:
# Create cftime object to mimic my real data.
yr1=250; yr2=250
times = xr.cftime_range(start=format(yr1,'04d') + '-01',
end =format(yr2,'04d') + '-02',
freq='1MS',calendar='noleap')
x=np.arange(6).reshape(2,3); y = x;
nt=len(times); ny=x.shape[0]; nx=x.shape[1]
# Create the dataarray object
dummy = xr.DataArray(data=np.random.random([nt,ny,nx]),dims=['t','iy','ix'],
coords=dict( time=(['t'],times), x=(['iy','ix'],x), y=(['iy','ix'],y) ) )
dummy.where(dummy==dummy.max(dim=['ix','iy']),drop=True ).squeeze()请参阅下面粘贴的图像,以查看最后一个命令的输出。它看起来不像要删除带有nan值的坐标。每次,数组的大小为2x2,当它应该是最大的2x3时。值和5 nan值。最后,如果drop命令正常工作,我应该只看到单元格78输出中的两个标量数。
我遗漏了什么?

发布于 2022-04-22 16:49:49
这很棘手,当坐标是索引的函数时,我无法从.where中得到什么。您考虑过使用.stack作为解决方案吗?如果我正确理解它,将数组堆叠在' ix‘和'ix’上,然后取.idxmax(),就会给出您正在寻找的iy和ix索引。
dummy_stacked=dummy.stack(z=['ix','iy'])
dummy_stacked.idxmax('z')https://stackoverflow.com/questions/71961197
复制相似问题