Filter löschen
Filter löschen

cumulative sum of an array

3 Ansichten (letzte 30 Tage)
Lanceric Tse
Lanceric Tse am 13 Aug. 2018
Kommentiert: James Tursa am 13 Aug. 2018
Hi, so I have an array,b, I need to find the cumulative sums for every 5 values.
To calculate the cumulative sum S of an array a with 5 values
b=[1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0];
a=[1 2 3 4 5];
amean=mean2(a);
S=zeros([1 length(a)]);
S(1)=a(1)-amean
for i=2:5
S(i)=S(i-1)+(a(i)-amean)
end
S=-2 -3 -3 -2 0
The result for b should look like S = -2 -3 -3 -2 0 0 1 3 6 0 -2 -3 -3 -2 0 0 1 3 6 0
  2 Kommentare
James Tursa
James Tursa am 13 Aug. 2018
What is your question? For the given b, what would be your desired output?
Lanceric Tse
Lanceric Tse am 13 Aug. 2018
Bearbeitet: Lanceric Tse am 13 Aug. 2018
The desired output with be an array S, which contains the cumulative sums of every 5 values.
The code under the %% is how I would get the cumulative sum of an array of 5 values

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 13 Aug. 2018
Bearbeitet: Matt J am 13 Aug. 2018
br=reshape(b,5,[]);
S=reshape( cumsum(br-mean(br)) ,1,[])
  1 Kommentar
James Tursa
James Tursa am 13 Aug. 2018
And, for older versions of MATLAB
S = reshape( cumsum(bsxfun(@minus,br,mean(br))) ,1,[])

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

dpb
dpb am 13 Aug. 2018
Bearbeitet: dpb am 13 Aug. 2018
>> N
N =
5
>> S=sum(reshape(b,[],length(b)/N))
S =
15 30 15 30
>>
>> S=cumsum(reshape(b,[],length(b)/N))
S =
1 6 1 6
3 13 3 13
6 21 6 21
10 30 10 30
15 30 15 30
>>
  2 Kommentare
Lanceric Tse
Lanceric Tse am 13 Aug. 2018
I'm looking for the cumulative sum, not sum
dpb
dpb am 13 Aug. 2018
Sorry, typo...the fix should be obvious... :)

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by