Arrays Dask中项目分配的解决方法

Arrays Dask中项目分配的解决方法,arrays,numpy,variable-assignment,dask,python-xarray,Arrays,Numpy,Variable Assignment,Dask,Python Xarray,我在一个模型中有一段代码,它根据前一天另一个数组的值转换数组。如果当天的最高温度低于前一天的最低温度,则应将该值更改为当前日期前一天的最低温度值。同样,当当天的前一天的最低温度高于前一天的最高温度时,该值应更改为当前日期前一天的最高温度值。我有两个版本都给出相同的错误,因为Dask数组不支持项分配: for ens in range(0,num_ens): for lat in range(0, num_lats): for lon in range(0, num_lon

我在一个模型中有一段代码,它根据前一天另一个数组的值转换数组。如果当天的最高温度低于前一天的最低温度,则应将该值更改为当前日期前一天的最低温度值。同样,当当天的前一天的最低温度高于前一天的最高温度时,该值应更改为当前日期前一天的最高温度值。我有两个版本都给出相同的错误,因为Dask数组不支持项分配:

for ens in range(0,num_ens):
    for lat in range(0, num_lats):
        for lon in range(0, num_lons):
            for day in range(1, 240):
                if max_ens[ens, lat, lon, day] < min_ens[ens, lat, lon, day-1]:
                    max_ens[ens, lat, lon, day] = min_ens[ens, lat, lon, day-1]
                if min_ens[ens, lat, lon, day] > max_ens[ens, lat, lon, day-1]:
                    min_ens[ens, lat, lon, day] = max_ens[ens, lat, lon, day-1]
有人知道如何在达斯克有效地做到这一点吗

提前谢谢

编辑:


我一直在尝试实现where函数,但当应用where函数时,数组的形状会进行调整。

我会尝试使用numpy解决此问题,而不使用for循环或就地赋值。我的猜测是,使用
np.where
np.roll
,和
np.stack
,或者聪明的广播是可行的。嗨,洛克林先生,你能更具体地知道如何使用np.where,np.roll或np.stack吗?我试着用where函数来解决这个问题,但不幸的是失败了我没有花时间来解决你的问题,不是吗
max_ens[:, :, :, day] = np.maximum(max_ens[:, :, :, day], min_ens[:, :, :, day - 1])
min_ens[:, :, :, day] = np.minimum(min_ens[:, :, :, day], max_ens[:, :, :, day - 1])