Чтение разреженного массива из массива numy в chunked dask - PullRequest
0 голосов
/ 22 января 2019

Имея большой массив 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 Ответ

0 голосов
/ 20 февраля 2019

Ну, в настоящее время вы все еще загружаете все данные в массивный массив, так что он должен уместиться в памяти?

В идеале вы должны использовать технологию хранения, которая допускает редкое хранение или, по крайней мере, произвольный доступ. TileDB сегодня интересный выбор.

Сегодня я, вероятно, хотел бы хранить данные в HDF5 или Zarr с некоторым подходящим сжатием, чтобы скрыть стоимость нулей, а затем вызвать

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

Точно так же, как у вас выше, но где хранилище - это то, что обеспечивает произвольный доступ с диска.

...