2015-12-03 3 views
1

У меня есть вопрос, связанный с агрегированием данных. Существует ли fuction, который делает пошаговые суммы массива. Должен быть какой-то простой способ, но слова, которые я искал, не казались правильными. Поэтому в основном то, что я хочу сделать, этоПостроение ступенчатой ​​(агрегированной) суммы

mydata  = rand(360,1); 
cat_size = 10; 
aggreg_sum = zeros(ceil(length(mydata)/cat_size),1); 
c = 1; 
for i = 1:cat_size: length(mydata) 
    aggreg_sum(c) = sum(mydata(i:(i+cat_size)-1)); 
    c=c+1; 
end 

ответ

1

Что касается первого вопроса, то вы можете использовать accumarray:

subs = 0*mydata; 
subs(1:cat_size:end) = 1; 
subs = cumsum(subs); 
aggreg_sum = accumarray(subs(:), mydata(:)); 
+1

@ Шай: Спасибо, это было то, что я искал. Подумав немного больше об этом, я решил, что reshape также должен это сделать ... 'sum (reshape (mydata, cat_size, []))' – horseshoe

+0

@horseshoe действительно, если 'numel (mydata)' является целым числом, умноженным на 'cat_size 'то использование' reshape' может даже быть лучше, чем 'tankarray'. – Shai

+0

@ Shai: А вы правы, и я мог бы иметь именно это, так как мои данные на самом деле 361, а не 360. Поэтому я буду придерживаться вашего решения. Все еще оставляет второй, чтобы решить ... – horseshoe