Azzera filtri
Azzera filtri

cumulative sum of an array

4 visualizzazioni (ultimi 30 giorni)
Lanceric Tse
Lanceric Tse il 13 Ago 2018
Commentato: James Tursa il 13 Ago 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 Commenti
James Tursa
James Tursa il 13 Ago 2018
What is your question? For the given b, what would be your desired output?
Lanceric Tse
Lanceric Tse il 13 Ago 2018
Modificato: Lanceric Tse il 13 Ago 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

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 13 Ago 2018
Modificato: Matt J il 13 Ago 2018
br=reshape(b,5,[]);
S=reshape( cumsum(br-mean(br)) ,1,[])
  1 Commento
James Tursa
James Tursa il 13 Ago 2018
And, for older versions of MATLAB
S = reshape( cumsum(bsxfun(@minus,br,mean(br))) ,1,[])

Accedi per commentare.

Più risposte (1)

dpb
dpb il 13 Ago 2018
Modificato: dpb il 13 Ago 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 Commenti
Lanceric Tse
Lanceric Tse il 13 Ago 2018
I'm looking for the cumulative sum, not sum
dpb
dpb il 13 Ago 2018
Sorry, typo...the fix should be obvious... :)

Accedi per commentare.

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by