calculate the accumulation of a variable over time within a loop?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Michael
el 17 de Sept. de 2014
Hello,
I have evaporation as daily values (m). I have calculated the weighted fieldmean, which gives me a vector with length = no. of days. However, I would like to display these values as monthly sums.
How can I do this in a loop?
For example:
newsum(1) = nansum(data(1:30)) and so forth...
2 comentarios
dpb
el 17 de Sept. de 2014
Do you have a corresponding date/day of month vector or does the series simply begin at a known date? And, of course, year to know if leap year or not...
Respuesta aceptada
Sean de Wolski
el 17 de Sept. de 2014
Once you get the month data, the code will be almost identical to this answer:
Instead of @std, you'll want to pass in @sum
6 comentarios
Más respuestas (1)
dpb
el 17 de Sept. de 2014
Editada: dpb
el 17 de Sept. de 2014
... to calculate 3-month sums...
There it's simpler to use another Matlab "trick" of recognizing and utilizing internal storage order and Matlab's handling of arrays. Generate the vector of monthly sums as above then to group by threes reshape and sum over the reshaped array and recast back...
mnthsum=accumarray(... % the monthly sums as above
threemnth=sum(reshape(mnthsum,3,[])).'; % sum over columns of 3 row/each
The above relies on the linear storage order and that Matlab orders arrays/matrices in column-major order and the default action of functions such as sum is to operate over columns. This "trick" is useful for any such operation over a given evenly-divisible subset of any array.
ADDENDUM
If it's decided that the monthly sums aren't needed any longer, the above can be done in place, of course...
mnthsum=sum(reshape(mnthsum,3,[])).';
0 comentarios
Ver también
Categorías
Más información sobre Dates and Time en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!