2013-07-10 2 views
0

Я пытаюсь суммировать вектор в группах по двадцать, длина вектора, например. 7628. Я не могу понять, способ вывода вектора с суммами наборов двадцати илиСуммируя области матрицы, которые не пересекаются в matlab

ans = [sum(a(1:20) sum(a(21:30)....]. 
+0

Вам понадобится отформатировать это немного лучше. И добавьте немного больше кода, чтобы показать, что вы пробовали. – simonmorley

ответ

3

Так как 7600 равномерно делится на 20, вы можете изменить и сумму:

a = rand(7600,1); 
sum(reshape(a,20,7600/20)) 

EDIT Адресация комментарий для Non нацело длины

b = 20; 
sz = size(a); 

% Last elements to exclude 
excl = mod(sz(1),b); 

% Sum reshape and sum excluded separately 
[sum(reshape(a(1:end-excl), b, fix(sz(1)/b))), sum(a(end-excl+1:end))] 
+0

Я попытался использовать reshape, подобный тому, что показал @oleg komarov, но число не делится на 20, это 7628. Я также пробовал nlfilter, но это скользящая шкала, а не дискретные куски. – user2570403

+0

В следующий раз сразу сообщите, что у вас есть 7628. – Oleg

+0

Извините, у меня просто не было номера под рукой, но я попробую отредактированный кусок, похоже, он должен работать Спасибо – user2570403

0

upfirdn также должны хорошо работать, с upsca коэффициент заполнения 1, импульсная характеристика ones(1,20) и коэффициент прореживания 20.

(Примечание: требуется панель инструментов обработки сигналов)

Смежные вопросы