在向量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