存储过滤的Dask数组中的锯齿状行数据

问题描述

我有两个大的dask数组,一个是我感兴趣的值(N,M,2),另一个是(N,M)布尔值索引,它们实际上是我感兴趣的第一个数组中的值我必须将后者存储在磁盘上,但是我需要节省磁盘空间。由于只有大约一半的数据点是有趣的,因此我考虑过滤掉那些不感兴趣的数据。 我需要保留有关值来自哪一行的信息。列不太重要。但是,这破坏了很好的统一数组结构,因此这是一个锯齿状的数组问题。

稍后我将按行汇总数据,因此我弄清楚了这种可能不太理想的处理方案。它运行缓慢,并触发了许多daskcompute,这很可能是反模式。不过,我不确定该如何解决。以下是MVE。

import dask.array as da

N = 10_00
M = 10_000
indices = da.random.randint(0,2,(N,M),dtype=bool)
values = da.random.random((N,M,2))

# how to make this part faster/more efficient?
for i in range(N):
    row = values[i][indices[i]]
    row.compute_chunk_sizes().to_hdf5("rows_new.hdf5",f"/both_values_{i:08}")

在此阶段,我不依赖于任何特定的数据存储方案或格式,只是我需要合理地保留尽可能多的空间,保存所有2个元组,并能够将它们绑定到它们所在的行上。来自。但是,一行中的顺序并不重要。

是否有更明智的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)