Help with for cycle in a vector
1 回表示 (過去 30 日間)
古いコメントを表示
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
0 件のコメント
採用された回答
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 件)
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));
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!