Я использую HDF5 для хранения массивных разреженных массивов в формате координат (в основном, массив M x 3, который хранит значение, индекс x и индекс y для каждого ненулевого элемента).
Это отлично подходит для итеративной обработки всего набора данных, но я борюсь со случайным поиском на основе значений индекса.
Например, учитывая матрицу 100x100, я мог бы хранить не разреженные элементы следующим образом:
[[1,2,3,4,5], // Data values
[13, 14, 55, 67, 80], // X-indices
[45, 12, 43, 55, 12]] // Y-indices
Затем я хочу получить, например, все значения данных между 10<x<32
и 10<y<32
. В текущем формате все, что я могу делать, это перебирать массивы индексов x и y в поисках совпадающих индексов. Это очень-очень медленно, с несколькими чтениями с диска (мои реальные данные обычно имеют размер 200000x200000
с, возможно, 10000000
неразреженными элементами).
Есть ли лучший способ хранить большие (больше ОЗУ) разреженные матрицы и поддерживать быстрый поиск на основе индекса?
Я использую HDF5, но рад, что меня укажут в другом направлении