sum function and add using loop

2 vues (au cours des 30 derniers jours)
salahaldin
salahaldin le 25 Fév 2013
Commenté : Jan le 30 Nov 2016
I have a column vector with 31536001 number of rows.
e.g. [34 ;30; 14; 12; 54; 46; 47; 48; 49; ......10000]';
How can I write a command using a FOR loop, that adds the first 3600 elements together the "purpose is to change from seconds to hour", then the second element from 3601 s to 7200 second and so on.my data in seconds i need it in hour for one year i have 31536001 s and i need my factor to be 8760 hours
d=[1;2;3;4;5;6;................]
i need
[x1,x2,........]
which has
x1=(1+2+....3600)
thanks
  1 commentaire
Jan
Jan le 26 Fév 2013
Please use meaningful tags, because they are used to classify the questions. "matlab" is not helpful, beause all questions in a Matlab forum concern this topic.
What do you want to do with the last chunk, which does not contain 3600 elements?

Connectez-vous pour commenter.

Réponses (4)

Jan
Jan le 26 Fév 2013
num = floor(length(d) / 3600);
result = zeros(1, num);
for k = 1:num
s = (k - 1) * 3600;
result(k) = sum(d(1+s:3600+s));
end
Or faster, but without FOR:
len = floor(length(d) / 3600) * 3600;
e = reshape(d(1:len), 3600, []);
result = sum(e);
  3 commentaires
NURULAIN OTHMAN
NURULAIN OTHMAN le 29 Nov 2016
i want to ask. i have some data from 1 to 24000. then, i grouped them 1 to 1000,1001 to 2000, 2001 to 3000 and so on. then, i want to sum up data 1 with data 1001 with data 2001.. how can i do? Can help me?
Jan
Jan le 30 Nov 2016
@NURULAIN OTHMAN: Please open a new thread for a new question. Then I'd post this answer:
x = rand(1, 24000);
result = sum(reshape(x, 1000, numel(x) / 1000), 1);

Connectez-vous pour commenter.


Honglei Chen
Honglei Chen le 25 Fév 2013
Here is an example that you have 10 elements and you add every two of them.
x = rand(10,1);
sum(reshape(x,2,[])).'
  1 commentaire
salahaldin
salahaldin le 28 Fév 2013
thank

Connectez-vous pour commenter.


Miroslav Balda
Miroslav Balda le 26 Fév 2013
Let your data be in vector data(1:31536001). Try this code:
k = 0;
K = 0;
x = zeros(1,8760);
while k<8760,
k = k+1;
x(K) = sum(data(1+K:3600+K));
K = K+3600;
end
  1 commentaire
salahaldin
salahaldin le 28 Fév 2013
thank

Connectez-vous pour commenter.


Andrei Bobrov
Andrei Bobrov le 26 Fév 2013
Modifié(e) : Andrei Bobrov le 26 Fév 2013
data - your vector with size < 31536001 x 1 >;
n = numel(data);
[~,t] = histc(1:n,(0:3600:n) + eps(n));
out = accumarray(t(:),data(:));
or
out = sum(reshape([data;zeros(mod(-n,3600),1)],3600,[])).';
  1 commentaire
salahaldin
salahaldin le 28 Fév 2013
thank

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Tags

Aucun tag saisi pour le moment.

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by