Im, использующий 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
нерезкие элементы).
Есть ли лучший способ хранения больших (больших, чем RAM) разреженных матриц и поддержки быстрого поиска по индексу?
Я использую hdf5, но счастлив отметить и в других направлениях