Как эффективно хранить и получать доступ к 4D матрице?

У меня 4D матрица данных, которая не помещается в ОЗУ (~70 ГБ). Он представляет собой объемное изображение по времени (размеры x, y, z, t). Иногда я хочу получить доступ к срезу xy, иногда я хочу получить доступ ко всем значениям вокселя вдоль t, иногда я хочу получить доступ к значениям набора значений xyz вдоль t.

Я достиг этого, сохранив в памяти необработанную двоичную матрицу 4D и получая к ней доступ с помощью библиотеки NRRD благодаря отдельному заголовку или с отображением памяти в matlab.

Проблема в том, что это неэффективно. Я испытываю огромное время доступа по "медленной" оси. Итак, вопрос: как я могу сделать это эффективно? (мое хранилище - это RAID с жесткими дисками).

Я мог бы попробовать несколько вещей:

  • изменить язык (будет ли быстрее C?)
  • попробуйте фрагменты HDF5 (это то, что предлагает этот пост)
  • купить SSD (нереальный вариант, поскольку у меня есть сотни терабайт для хранения и доступа, а SSD стоят дорого)

Обратите внимание, что релевантна только часть значений (представьте сферу в кубе), и я мог бы воспользоваться этим, чтобы получить пространство.

0 ответов

Другие вопросы по тегам