Обработка большого количества структур в MATLAB - PullRequest
4 голосов
/ 13 ноября 2008

Мне нужно обрабатывать огромные (десятки миллионов) структуры MATLAB; Мне понадобилось около дюжины полей, поэтому я считаю, что память не будет проблемой, пока я не обнаружу это ( объяснение )

>> s=[];
>> s.first=1;
>> whos
  Name      Size            Bytes  Class     Attributes

  s         1x1               132  struct              

>> s.second=2;
>> whos
  Name      Size            Bytes  Class     Attributes

  s         1x1               264  struct              

>> s.third=3;
>> whos
  Name      Size            Bytes  Class     Attributes

  s         1x1               396  struct

Что, очевидно, мешает мне использовать десятки миллионов гораздо более крупных структур.

Использование классов решает проблему использования памяти (разметка 56 байт на массив структуры), но она чрезмерно медленнее при построении и уничтожении объектов.

Как я могу создать структуру, которая легка (как структуры C) и быстро?

Ответы [ 4 ]

2 голосов
/ 27 ноября 2008

Другой вариант: хранить структуру массивов в скрытой глобальной структуре. Создайте объект класса, который копается в этой глобальной структуре, чтобы вырезать данные, которые относятся только к этому одному экземпляру.

Глобальная структура может быть реализована более четко с помощью ключевого слова PERSISTENT и / или с помощью личных / каталогов для сокрытия информации. Если вы используете 2008a или новее, новая система дескрипторов объектов должна помочь сделать реализацию намного чище.

Если у вас действительно большие и сложные структуры данных, я бы серьезно подумал о другом языке, таком как C ++, Java или Python без numpy. Я люблю Matlab, когда мои задачи соответствуют ему. Структуры данных не являются одной из сильных сторон Matlab, особенно до 2008 года.

2 голосов
/ 13 ноября 2008

Преобразуйте эти структуры в массивы, а затем предоставьте методы доступа через класс.

2 голосов
/ 17 ноября 2008

(a) использовать большие массивы (где «первое» поле структуры 1 - это элемент 1 массива «первый», для структуры 2 - элемент 2 и т. Д.), Как предполагает Pyrolistic.

(b) рассмотрите возможность использования другого языка, такого как C ++ (или, может быть, Java), который обеспечивает лучший контроль над использованием памяти. Вы можете получить доступ к коду C ++ через mex-функции (что иногда может быть немного сложно). Вы можете оценить байт-код Java непосредственно из Matlab.

0 голосов
/ 13 ноября 2008

Что вы имеете в виду с классами? Насколько я помню, у классов был термин в Matlab для типа. Я предполагаю, что вы имеете в виду самоопределенный класс.

Решение (которое также рекомендуется в документах matlab) состоит в том, чтобы переключиться с массива структур на структуру массивов (см. Пример на R, G, B).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...