Загрузка огромного массива ячеек, содержащих структуры

У меня проблема с сохранением и загрузкой огромного набора данных в Matlab.

Мой набор данных содержит свойства серии изображений с использованием Matlab's regionprops, В настоящее время у меня есть MAT-файл размером около 21 ГБ, и это требует времени для загрузки.
Этот MAT-файл имеет один массив ячеек, содержащий структурные массивы свойств эллипсов на каждом срезе.

Есть ли у них какие-либо предложения относительно того, как обойти это? Есть ли лучший и эффективный способ сохранения MAT-файлов, чем форматы -v7.3?

1 ответ

Решение

Одним из решений может быть использование 'table' аргумент regionprops, Это приводит к тому, что вывод table а не массив структур. Этот формат более эффективен для хранения, чем массив struct.

Еще лучше, если вы не возражаете вручную отследить, где находятся данные, - создать числовой массив с соответствующими данными:

BW = imread('text.png'); % Example image used in the docs
s = regionprops(BW,{'MajorAxisLength','MinorAxisLength','Orientation'});
t = regionprops('table',BW,{'MajorAxisLength','MinorAxisLength','Orientation'});
m = [s.MajorAxisLength; s.MinorAxisLength; s.Orientation];

whos

  Name        Size             Bytes  Class      Attributes

  BW        256x256            65536  logical              
  m           3x88              2112  double               
  s          88x1              31872  struct               
  t          88x3               3496  table                

Числовой массив является гораздо более эффективным способом хранения данных, чем структурный массив, поскольку каждый элемент в структурном массиве представляет собой отдельную матрицу, которой требуется собственный заголовок. Заголовок (я полагаю, 114 байтов) в этом случае намного больше, чем значение, хранящееся в массиве (в данном случае 8 байтов), следовательно, издержки 31872 / 2112 = 15.1,

Таблица хранит каждый столбец в отдельном массиве, поэтому у вас намного меньше накладных расходов. Вместо массивов 3 x 88 (количество объектов x количество объектов) у вас есть только 3.

Если каждое изображение гарантированно содержит одинаковое количество объектов, вы можете рассмотреть возможность размещения этих матриц в одном трехмерном массиве вместо массива ячеек. Усиление здесь будет меньше.

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