【问题标题】:check the neighbours of a cell in a vector Matlab检查向量中单元格的邻居 Matlab
【发布时间】:2013-08-16 13:17:38
【问题描述】:

我有两个向量

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 所以我想知道是否有人可以帮助我做这个条件,我不知道这是否可以在没有循环的情况下完成以节省时间。

【问题讨论】:

  • 对于向量中的第 5 个元素,一侧只有 4 个元素(1 到 4)...
  • 这就是为什么我试图将他的帖子编辑到第 7 个元素而不是第 5 个元素,但由于某种原因没有接受编辑。不过,它似乎真的是第 7 次。
  • 谢谢,我已经更新了。

标签: matlab


【解决方案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)

【讨论】:

  • 感谢您的回答!我只是想知道如果值与其邻居之间的差值高于T 是否仅在邻居不为零时忽略结果。例如,如果T=3K=[1 1 1 2 1 2 10 4 2 10 0 5 1] 然后X=1 因为有几个元素有差异。超过T inc 第11 个元素0,但如果K=[8 7 8 9 7 7 10 7 7 8 0 9 8] 然后X=1 虽然差异。它和第 11 个元素之间是>T,但这是因为第 11 个元素是零0。如果需要进一步说明,请告诉我。提前致谢
  • 我想知道是否有机会查看我之前的评论,我还发布了一个关于此的新问题,可以在这里找到stackoverflow.com/questions/18287703/…
猜你喜欢
  • 2022-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多