改变矩阵的特殊元素而不使其他元素成为增益

时间:2015-11-05 19:20:02

标签: matlab element

我想知道是否可以在不枚举该矩阵的所有其他元素的情况下更改矩阵的元素。

例如,我有一个矩阵(D),其中1900行和1500列,第三维5。例如,当我编写代码时:

D(1,2,[2,4])=[1 0];

它再次制作新的矩阵D,我想要一点改变。它是否有可能只是在那些元素中改变而不再重新生成其他元素。

2 个答案:

答案 0 :(得分:1)

这是linear indexing -

的一种方式
dim1_idx = 1;
dim2_idx = 2;
dim3_idx = [2,4];

[m,n,r] = size(D);
D( dim1_idx+(dim2_idx-1)*m + (dim3_idx-1)*m*n ) = [0,1]

您可以引入sub2ind以获得更多可读性 -

D( sub2ind([m,n],dim1_idx,dim2_idx) + (dim3_idx-1)*m*n ) = [0,1]

验证输出 -

>> D = rand(5,4,4);

dim1_idx = 1;
dim2_idx = 2;
dim3_idx = [2,4];

[m,n,r] = size(D);
D( dim1_idx+(dim2_idx-1)*m + (dim3_idx-1)*m*n ) = [0,1];
>> D(1,2,2)
ans =
     0
>> D(1,2,4)
ans =
     1

答案 1 :(得分:0)

你理解matlab的行为是错误的。

举个例子:

D=rand(1900,1500,5);
D(1,2,[2,4])=[1 0]; %Here the original data structure is updated, no new copy of D is created.

当您仍将原始矩阵保留在另一个变量中时,只有一个例外:

M=rand(1900,1500,5);
D=M; %Typically, such calls only cause a shallow copy not actually replicating M
D(1,2,[2,4])=[1 0]; %Now a copy has to be created, because you are still holding the unmodified original