2017-07-04 64 views
0

的指標。如果我用這個語法:變化的陣列或矩陣

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 –

回答

2

要回答你的第一個問題:

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

0

您可以通過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