Matlab - 在矢量中找到邻域链的值

时间:2017-07-20 09:06:28

标签: matlab vector

我有一个具有值的向量,比如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]

我如何实现这一目标?

1 个答案:

答案 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).';