Effacer les filtres
Effacer les filtres

cumulative sum of an array

4 vues (au cours des 30 derniers jours)
Lanceric Tse
Lanceric Tse le 13 Août 2018
Commenté : James Tursa le 13 Août 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 commentaires
James Tursa
James Tursa le 13 Août 2018
What is your question? For the given b, what would be your desired output?
Lanceric Tse
Lanceric Tse le 13 Août 2018
Modifié(e) : Lanceric Tse le 13 Août 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

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 13 Août 2018
Modifié(e) : Matt J le 13 Août 2018
br=reshape(b,5,[]);
S=reshape( cumsum(br-mean(br)) ,1,[])
  1 commentaire
James Tursa
James Tursa le 13 Août 2018
And, for older versions of MATLAB
S = reshape( cumsum(bsxfun(@minus,br,mean(br))) ,1,[])

Connectez-vous pour commenter.

Plus de réponses (1)

dpb
dpb le 13 Août 2018
Modifié(e) : dpb le 13 Août 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 commentaires
Lanceric Tse
Lanceric Tse le 13 Août 2018
I'm looking for the cumulative sum, not sum
dpb
dpb le 13 Août 2018
Sorry, typo...the fix should be obvious... :)

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by