sum function and add using loop

2 ビュー (過去 30 日間)
salahaldin
salahaldin 2013 年 2 月 25 日
コメント済み: Jan 2016 年 11 月 30 日
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 件のコメント
Jan
Jan 2013 年 2 月 26 日
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?

サインインしてコメントする。

回答 (4 件)

Jan
Jan 2013 年 2 月 26 日
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 件のコメント
NURULAIN OTHMAN
NURULAIN OTHMAN 2016 年 11 月 29 日
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 2016 年 11 月 30 日
@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);

サインインしてコメントする。


Honglei Chen
Honglei Chen 2013 年 2 月 25 日
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 件のコメント
salahaldin
salahaldin 2013 年 2 月 28 日
thank

サインインしてコメントする。


Miroslav Balda
Miroslav Balda 2013 年 2 月 26 日
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 件のコメント
salahaldin
salahaldin 2013 年 2 月 28 日
thank

サインインしてコメントする。


Andrei Bobrov
Andrei Bobrov 2013 年 2 月 26 日
編集済み: Andrei Bobrov 2013 年 2 月 26 日
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 件のコメント
salahaldin
salahaldin 2013 年 2 月 28 日
thank

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

タグ

タグが未入力です。

製品

Community Treasure Hunt

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

Start Hunting!

Translated by