在向量Matlab中检查单元格的邻居

时间:2013-08-15 16:27:59

标签: matlab

我有两个载体

K=[1 1 1 2 1 2 1 4 2 10 4 5 1] 

L=[2 0 1 2 1 2 1 3 2 0 1 2 1]

我想比较每个向量中第7个元素的值与该值的邻居,其中邻居是每个元素旁边的5个元素。因此对于K,第7个元素是1,邻居是1 1 1 2 1 2(左邻居)和4 2 10 4 5 1(右邻居)。

对于L,第7个元素是1,邻居是2 0 1 2 1 2(左邻居)和3 2 0 1 2 1(右邻居)。如果第7个值与其每个邻居之间的差异超过某个阈值,那么我会做一些事情,例如X = 1,如果没有,那么我会做另一件事,例如X=2

所以在我的例子中,我将阈值设置为3,因此对于K,第7个元素值为1,并且它与其两个邻居10,5之间的差值大于阈值3,因此X将为1对于L,第5个元素值是1,它和它的所有邻居之间的差值小于阈值3,所以X将是2.所以我想知道是否有人可以帮我做这个条件,我是不确定这是否可以在没有循环的情况下完成以节省时间。

1 个答案:

答案 0 :(得分:1)

您可以使用anyor

来检查此情况
N = 5; % reference index
T = 3; % threshold

V = L; % used to pass the vector L to the if-statement
% V = K;

% formulate if-statement to check for values
% below/above index N and check if any difference
% exceeds the threshold
% the or-statement (because it does not matter if the 
% threshold is exceeded above index N or below)
% is expressed as |

if any((V(1:N-1)-V(N))>T) | any((V(N+1:end)-V(N))>T)
    X = 1;
else
    X = 2;
end

注意
根据您的Matlab版本V(1:N-1)-V(N)将无效,因为矩阵尺寸不一致。在这种情况下,请使用:V(1:N-1)-ones(size(V(1:N-1))).*V(N)