在向量Matlab中检查单元的邻域

在向量Matlab中检查单元的邻域,matlab,Matlab,我有两个向量 K=[1 1 1 2 1 2 1 4 2 10 4 5 1] 及 我想比较每个向量中第7个元素的值和这个值的邻域,邻域是每边元素旁边的5个元素。因此对于K,第7个元素是1,相邻元素是12(左邻域)和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=[1 1 1 2 1 2 1 4 2 10 4 5 1] 

我想比较每个向量中第7个元素的值和这个值的邻域,邻域是每边元素旁边的5个元素。因此对于
K
,第7个元素是
1
,相邻元素是
12
(左邻域)和
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,第五个元素的值为1,它与所有相邻元素之间的差值小于阈值3,因此X为2。因此,我想知道是否有人可以帮助我完成此条件,我不确定是否可以不使用循环来节省时间。

您可以使用
any
检查此条件:

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)-one(大小(V(1:N-1)).*V(N)

对于向量中的第5个元素,从一侧(1到4)只有4个元素…这就是为什么我试图将他的帖子编辑为第7个元素,而不是第5个元素,但由于某些原因,编辑没有被接受。这看起来真的是第七次了。谢谢,我已经更新了。谢谢你的回答!我只是想知道,如果值与其相邻值之间的差值大于
T
,则仅当相邻值不为零时,是否要忽略结果。例如,如果
T=3
K=[1 1 1 2 1 10 4 2 10 0 5 1]
那么
X=1
因为有两个元素的差异大于
T
包含第11个元素
0
,但是如果
K=[8 7 7 10 7 8 0 9 8]
然后
X=1
虽然它与第11个元素之间的差异是
>T
,但这是因为第11个元素是零
0
。如果需要更多的澄清,请告诉我。提前感谢我想知道是否有机会查看我之前的评论,我还发布了一个关于这个的新问题,可以在这里找到
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