代码之家  ›  专栏  ›  技术社区  ›  alex

从numpy读取稀疏数组到分块dask数组

  •  1
  • alex  · 技术社区  · 7 年前

    有一个大的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 . 有没有一种方法可以在加载输入的同时忽略所有的零?

    1 回复  |  直到 7 年前
        1
  •  0
  •   MRocklin    7 年前

    嗯,目前您仍在将所有数据加载到numpy数组中,所以它必须适合内存?

    今天我可能会将数据存储在HDF5或Zarr中,并进行适当的压缩以隐藏零的开销,然后调用

    x = da.from_array(storage, chunks='auto')
    x = x.map_partitions(sparse.COO)
    

    正如上面提到的,但是存储是从磁盘提供随机访问的东西。