перераспределение матриц - PullRequest
2 голосов
/ 18 ноября 2011

Я пытаюсь сократить время выполнения сценария, избегая бесполезного перераспределения больших матриц.Операция, подобная

B = A;

, вызывает небольшие накладные расходы, поскольку B будет указывать на ту же структуру, что и A, и Matlab не будет выделять новую, пока не произойдет обновление.

Но как насчет операции, подобной этой?

longVector = longVector(1:n);

Будет ли она просто обновлять структуру longVector, чтобы указывать на уже существующее подмножество данных, или (более дорогостоящим) будет вызывать выделение нового вектора и мусорастарый?

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Да, это уменьшит выделенный блок, но со временем приведет к фрагментации (в системе Windows).

0 голосов
/ 19 ноября 2011

Я верю в MATLAB

A = B;

, если за ним не следует

clear B;

, занимающий как минимум вдвое больше памяти.По крайней мере, на Mac и до нескольких версий назад (2009 или около того) это было так.

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

0 голосов
/ 19 ноября 2011

Я не уверен, что это будет лучше обязательно (я не проверял разницу), но вы могли бы вместо этого попробовать longVector(n+1:end)=[].Я почти уверен, что не выделит новую переменную.

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