python - 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 函数时会调整数组的形状。
解决方案
我想很容易理解为什么Dask 数组不支持项目分配?. 这是因为数据仍然存储在硬盘上而不是内存中。因此,除非您想覆盖磁盘上的文件,否则无法分配或更改这些值。
可能的解决方案是:
- 执行
load()
orcompute()
以便将数据加载到内存中。如果您的数据大于内存,您必须加载其中的一部分以适合您的内存(例如,ens
每次加载缓冲一个)。 - 分配 new
var
来存储结果并将它们堆叠到一个新的ndarray
. 然后将新ndarray
输出写入新文件。
希望这可以帮助。
推荐阅读
- openstreetmap - OSMnx-为什么'walk'网络大于'all'网络?
- flutter - 如何使用 dart:js 将选项传递给 javascript 函数?
- scala - 如何在 Spark Scala 中进行窗口分区并仅提取每个组的唯一值
- shopware - 如何在 Shopware 6 中为 OneToOneAssociationField 使用继承的标志
- biztalk - BizTalk 部署框架解决方案部署重新启动所有主机实例
- python - 用零填充不均匀点列表的缺失值
- ffmpeg - 使用 ffmpeg 将屏幕和麦克风直播到 azure 媒体服务
- angular - 值(绑定)更改时如何关闭 mat-sidenav?
- linux - 如何更正从 Unix Bourne Shell 的目录中打印出复制的文件?
- java - 通过spring jpa hibernate使用查询时无法findById