变化的阵列或矩阵

问题描述:

的指标。如果我用这个语法:变化的阵列或矩阵

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)不诉诸一个循环?

+1

我认为你正在寻找'cumsum':https://ch.mathworks.com/help/matlab/ref/cumsum.html –

要回答你的第一个问题:

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)

你想要做的是使一个累积和,这是可以做到,因为@leanderMoesingercumsum提到:

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

如果您想了解更多关于索引我强烈推荐以下职位: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); 
+0

谢谢你的回答。但是我仍然有一个疑问:假设我将执行包含矩阵而不是数组的操作(例如'C(mX,mY)= sum(sum(A(1:mX,1:mY)。* B 2:mX + 1,2:mY + 1)))'我如何改变mX和mY?(仅在mX = mY = 1时才会执行此操作)) – user1021

+0

@ user1021索引需要之后两个矩阵的大小为了工作而平等。大概你的指数不能保证。但是,如果你有一个不同的问题(这是因为它是关于元素明智的矩阵乘法,总和只是绒毛),请问一个新的问题。 – Adriaan

您可以通过cumsum像这样做:

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

现在最后一行是多余的;因为'C = cumsum(A)'包含5个元素,所以'C = C(1:5)'是一个单纯的操作,说'C = C'。 – Adriaan

+0

它可能会改变'mX'。这是一个通用的解决方案。 – OmG

+0

例如,如果将'mX'更改为'[1:4]',该解决方案就可以工作! – OmG