如何在MATLAB中明确地制作数组的深度副本?

如何在MATLAB中明确地制作数组的深度副本?,matlab,deep-copy,shallow-copy,copy-assignment,Matlab,Deep Copy,Shallow Copy,Copy Assignment,例如,我想将a的深度复制到b: >> a=zeros(2,3); >> b=a; 所以这里=只创建一个浅拷贝。我的问题是,在这种情况下如何生成深度副本?我知道我可以添加如下命令 b(1,1)=b(1,1) 让它成为一个深度拷贝。但是有更好的方法吗?Matlab不创建浅拷贝,而是使用写时拷贝。除了运行时,这对您来说应该是完全透明的,这意味着matlab会在需要时创建副本。但是,如果要强制复制,可以使用此处提到的示例之一: 一般来说,MATLAB使用写时复制,您不必考虑它

例如,我想将
a
的深度复制到
b

>> a=zeros(2,3);
>> b=a;
所以这里
=
只创建一个浅拷贝。我的问题是,在这种情况下如何生成深度副本?我知道我可以添加如下命令

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

让它成为一个深度拷贝。但是有更好的方法吗?

Matlab不创建浅拷贝,而是使用写时拷贝。除了运行时,这对您来说应该是完全透明的,这意味着matlab会在需要时创建副本。但是,如果要强制复制,可以使用此处提到的示例之一:


一般来说,MATLAB使用写时复制,您不必考虑它。我同意Daniel的观点,这种拷贝对您来说是完全透明的,但我不建议您进行强制深度拷贝。像“重塑”这样的事情也不会强制复制,因此在内存使用方面,您可以获得很大的效率。MATLAB将在需要时为您创建一个副本

下面是一些讨论这一点的好文章:


谢谢。如果A的维度是可变的呢?我的意思是A可以是三维数组或四维数组。您可以使用线性索引,然后将其重塑为原始数组大小:
B=重塑(A(:),大小(A))
。请注意,如果需要“深度复制”,则必须使用实际复制基础数据的操作替换
A(:)
。请描述您的用例。我看不出这有什么用。你可能会有在你的代码中引入悲观情绪的危险。我遇到的问题是,我的matlab函数调用了一个C函数,它悄悄地改变了matlab不知道的输入参数的值。啊,但是你有一个有趣的问题。请将问题转化为您的问题,包括显示如何从MATLAB调用此函数的。根据您是使用MEX文件还是使用自动连接C库的新方法,有不同的解决方案。在我看来,显式地强制深度复制不是正确的方法。或者更确切地说,写一个新的问题,以避免使你在这里得到的答案无效。我遇到的问题是,我的matlab函数调用了一个C函数,它默默地改变了matlab不知道的输入参数的值。
 B=A(:,:);