arrays - Dask 中项目分配的解决方法
问题描述
我在模型中有一段代码,它根据前一天另一个数组的值转换数组。如果当日最高气温低于前一天最低气温,则该值应改为当日前一天最低气温的值。同样,当当日前一天的最低温度高于前一天的最高温度时,该值应改为当日前一天的最高温度值。我有两个版本都给出相同的错误,因为 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]
矢量化版本:
max_ens[:, :, :, day] = np.maximum(max_ens[:, :, :, day], min_ens[:, :, :, day - 1])
min_ens[:, :, :, day] = np.minimum(min_ens[:, :, :, day], max_ens[:, :, :, day - 1])
有谁知道如何在 Dask 中有效地做到这一点?
提前致谢!
编辑:
我一直在尝试实现 where 函数,但是在应用 where 函数时会调整数组的形状。
解决方案
我会尝试只用 numpy 解决这个问题,而不使用 for 循环或就地分配。我的猜测是它可以用np.where
, np.roll
, and np.stack
, 或者聪明的广播
推荐阅读
- c# - 如何在 .NET Core 中调用存储在 appsettings.json 中的 API?
- jsf - 当 bean 方法响应时间较长时,CommandButton 操作执行两次
- javascript - 尝试访问 cypress 上的网站时出错“未定义 Vue”
- typescript - 仅将函数参数类型限制为具有特定类型的接口的键
- android - 我想实施 OPI Terminal e 支付系统,我该怎么做?
- rust - 检查提供的字符串是否为单个路径组件
- python - 将时间戳信息转换为会话信息 Python
- javascript - FindIndex() 从 redux 存储中删除项目
- php - Wordpress 更改未显示在我的网站上
- android - OpenGL checkGlError("glDrawArrays") 抛出 UncaughtExceptionHandler