Как предварительно выделить массив класса в MATLAB?

У меня есть массив объектов в MATLAB, и я вызвал их конструкторов в цикле:

antsNumber  = 5;
for counter = 1: antsNumber
    ant(counter) = TAnt(source, target);
end

MATLAB попросил меня использовать предварительное выделение для ускорения процесса. Я действительно знаю преимущества предварительного выделения, но я не знаю, как сделать это для объектов.

13
задан Kamran Bigdely 24 March 2010 в 18:33
поделиться

3 ответа

Следующая ссылка может быть полезна:

http://www.mathworks.com/help/techdoc/matlab_oop/brd4btr.html#brd4nrh
Веб-архив мертвой ссылки

Новая ссылка:
http://de.mathworks.com/help/matlab/matlab_oop/creating-object-arrays.html

6
ответ дан 2 December 2019 в 00:17
поделиться

Вот несколько вариантов, которые требуют, чтобы вы спроектировали конструктор класса для TAnt , чтобы он мог обрабатывать случай без входного аргумента. :

  • Вы можете создать объект по умолчанию TAnt (вызвав конструктор без входных аргументов) и реплицировать его с помощью REPMAT , чтобы инициализировать ваш массив перед входом в цикл for. :

     ant = repmat (TAnt (), 1,5); % # Репликация объекта по умолчанию 
     

    Затем вы можете перебрать массив, перезаписывая каждый объект по умолчанию новым.

  • Если все ваши объекты TAnt инициализируются одними и теми же данными, и они не производные от класса дескрипторов , вы можете создать 1 объект и используйте REPMAT , чтобы скопировать его:

     ant = repmat (TAnt (источник, цель), 1,5); % # Репликация объекта 
     

    Это позволит вам вообще избежать зацикливания.

  • Если TAnt является производным от класса дескрипторов , первый вариант выше должен работать нормально, а второй вариант - нет, потому что он даст вам 5 копий дескриптор для одного и того же объекта в отличие от 5 дескрипторов для различных объектов.

8
ответ дан 2 December 2019 в 00:17
поделиться

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

Причина, по которой он выдает ошибку, заключается в том, что ему нужно найти новое место. Скажем, я даю вам список из семи объектов и говорю вам, что вам нужно разместить их все в ряд, затем я ухожу и даю вам еще несколько вещей, которые вам нужно куда-то положить. Затем я даю вам восьмой объект и говорю вам ставить его сразу после седьмого. Поскольку у вас есть что-то там, где находится восьмой объект, вам нужно либо переместить его в сторону, либо переместить все семь объектов. Matlab сообщает вам, что было бы быстрее, если бы вы сказали ему заранее, что хотите поместить туда 5 вещей, вместо того, чтобы просто давать ему вещи одну за другой, каждый раз ища новое место. Вы можете сделать это, добавив эту строку в начало вашего кода:

ant = [1:5];

Есть и другие способы сделать это.

1
ответ дан 2 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: