有一个很大的3D NumPy数组(其中大多数为零),我正在尝试将其转换为Dask中稀疏数组的分块版本
import sparse
import dask.array as da
input_arr = np.load(...)
chunked_arr = da.from_array(input_arr, (32,32,32)).map_blocks(sparse.COO)
AFAIK分块有效,但输出数组保留输入中的全零,因此chunked_arr
的大小等于input_arr
的大小。有没有一种方法可以在省略所有零的同时载入输入?
答案 0 :(得分:0)
好吧,当前您仍将所有数据加载到numpy数组中,因此它必须适合内存吗?
理想情况下,您将使用允许稀疏存储或至少随机访问的存储技术。今天,TileDB是一个有趣的选择。
今天,我可能会通过适当的压缩将数据存储在HDF5或Zarr中,以隐藏零成本,然后调用
x = da.from_array(storage, chunks='auto')
x = x.map_partitions(sparse.COO)
就像上面一样,但是存储可以提供从磁盘的随机访问。