我有一个具有值的向量,比如a=[10 20 42 90]
,我想要做的是找到范围为30的邻居并用它们的方法替换这些值。例如,对于a
向量,20的值是10的邻居。此外,42也是10到20的邻居,因为它是邻居的邻居但是90不是邻居值,它是从邻近大小为30的10岁无法到达。
所以我想用他们的手段替换所有10,20和42并获得向量a=[24 90]
。
如果a=[10 20 42 66 155]
,则生成的矢量为a=[34.5 155]
。
我如何实现这一目标?
答案 0 :(得分:1)
a=[10 20 42 66 155]; % sample data
r = 30; % sample range
a = accumarray(cumsum([r+1 abs(diff(a))]>r).',a,[],@mean).';
Ungolfed和评论版:
a=[10 20 42 66 155]; % sample data
r = 30; % range
% difference between subsequent groupmembers. First difference is set to be higher than r
d = [r+1 abs(diff(a))];
% each group one label
L = cumsum(d>r);
% calculate mean of each group
a = accumarray(L.',a,[],@mean).';