Как явно сделать глубокую копию массива в MATLAB? - PullRequest
2 голосов
/ 31 января 2020

Например, я хочу сделать глубокую копию от a до b:

>> a=zeros(2,3);
>> b=a;

Так что здесь = создает только поверхностную копию. У меня вопрос, как создать глубокую копию в этом случае? Я знаю, что могу добавить команду типа

b(1,1)=b(1,1)

, чтобы сделать ее глубокой копией. Но есть ли лучший способ сделать это?

Ответы [ 2 ]

6 голосов
/ 31 января 2020

Matlab не создает поверхностную копию, вместо этого он использует копирование при записи. За исключением времени выполнения, оно должно быть полностью прозрачным для вас, то есть matlab создает копию при необходимости. Тем не менее, если вы хотите форсировать копию, вы можете использовать один из примеров, упомянутых здесь: { ссылка }

 B=A(:,:);
2 голосов
/ 31 января 2020

Обычно MATLAB использует копирование при записи, и вам не нужно об этом думать. Я согласен с Дэниелом в том, что этот вид копии полностью прозрачен для вас, но я бы не рекомендовал делать принудительное глубокое копирование. Такие вещи, как изменение формы, также не будут принудительно копировать, так что вы получите большую эффективность в плане использования памяти. MATLAB создаст для вас копию, когда это будет необходимо.

Вот хорошая статья, в которой обсуждается это:

...