Help with for cycle in a vector

1 回表示 (過去 30 日間)
aurc89
aurc89 2014 年 4 月 29 日
編集済み: Andrei Bobrov 2014 年 4 月 29 日
I have a vector , and I want to obtain another vector whose elements are obtained by averaging over the elements of the first one. For example I have
x = [3,6,4,5,1,7,9,8,5]
and I want to obtain a vector by averaging every 3 elements of x, like this
y = [(3+6+4)/3,(5+1+7)/3,(9+8+5)/3].
Also I want to take into account the modulus of division, so if I have
x=[3,6,4,5,1,7,9,8]
then y should be
y = [(3+6+4)/3,(5+1+7)/3,(9+8)/2],
and if
x=[3,6,4,5,1,7,9]
then y should be
y = [(3+6+4)/3,(5+1+7)/3,9]
I know I have to use more than a 'for' cycle but don't know how, could you help me? thanks

採用された回答

Azzi Abdelmalek
Azzi Abdelmalek 2014 年 4 月 29 日
x = [3,6,4,5,1,7,9,8,5]
p=mod(-numel(x),3)
x(end+1:end+p)=mean(x(end:-1:end-(3-p)+1))
out=mean(reshape(x,3,[]))
  1 件のコメント
aurc89
aurc89 2014 年 4 月 29 日
Thanks!

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

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2014 年 4 月 29 日
編集済み: Andrei Bobrov 2014 年 4 月 29 日
out = blockproc(x,[1,3],@(x)mean(x.data));
or
out = nanmean(reshape([x,nan(1,mod(-numel(x),3))],[],3));

カテゴリ

Help Center および File ExchangeElementary Math についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by