数组或矩阵索引的变化

Variation of indices of an array or matrix

如果我使用这种语法:

mX=[1:5];
A=rand(5,1);
C(mX)=sum(A(1:mX));

为什么 C(mX) 的内容不随 mX 的变化而变化?

而不是做

C(1)=A(1) 
C(2)=A(1)+A(2), etc

确实如此:

C(1)=A(1)
C(2)=A(1)
C(3)=A(1), etc

有没有什么方法可以改变 C(mX) 而无需使用循环?

您可以通过 cumsum 这样做:

mX=[1:5];
A=rand(5,1);
C = cumsum(A(mX));

回答你的第一个问题:

mX=1:5;
A=rand(5,1);
C(mX)=sum(A(1:mX));

A(1:[1 2 3 4 5]) 进行求和,结果是 A(1:1),因此您的所有 C(mX) 值将完全由元素 A(1).[=21 填充=]

你要做的是做一个累计和,这是可以做到的,如 mentioned with cumsum:

A=rand(5,1);
C = cumsum(A)
C =
    0.0975
    0.3760
    0.9229
    1.8804
    2.8453

如果您想了解有关索引的更多信息,我强烈推荐以下 post:Linear indexing, logical indexing, and all that

如果您不想要 A 的所有元素,但例如最多可以做到元素三

mX = 1:3;
A = rand(5,1);
C = cumsum(A(mX)); calculate only to mX

mX = [1 3 5];
C = cumsum(A(mX)) % Also works if you only want elements 1 3 and 5 to appear

% If you want elements of C 1 3 and 5 use 
tmp = cumsum(A);
C = tmp(mX);