数组或矩阵索引的变化
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);
如果我使用这种语法:
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 填充=]
你要做的是做一个累计和,这是可以做到的,如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);