【问题标题】:Finding indices of existing elements within a radius of a specific element查找特定元素半径内现有元素的索引
【发布时间】:2018-09-04 18:39:44
【问题描述】:

我有一个大矩阵 A,需要能够找到给定点 (xpos,ypos) 的特定半径 (range) 内所有元素的坐标。以下是我通常使用的:

    subx = max(1,xpos-range):min(n1,xpos+range);
    suby = max(1,ypos-range):min(n2,ypos+range);
    A_sub = A(subx,suby); %This is the submatrix around matrix A

其中n1size(A,1)n2 是矩阵的长度。这段代码给了我范围内所有元素的索引。我遇到的问题发生在点(xpos,ypos) 位于矩阵的最边缘时,例如xpos-rangeypos-range 给我负数(因为它给出了不存在的元素或像素的索引)。有没有办法修改此代码,以便我只获得正索引(实际存在的元素的索引)?

【问题讨论】:

  • 如果 "xpos-range" 或 "ypos-range" 给你负数,你的最大表达式是否会导致 "1" 是 A 的有效较低索引?
  • 我看不到上面的代码也不起作用。您确定负索引导致您的问题吗?另外,请注意,Matlab 是列优先的,即第一个维度是一列。这意味着将size(A,1)ysize(A,2)x 相关联在概念上是最简单的。
  • "n2 是矩阵的长度" 这不应该是n2=size(A,2)吗?

标签: matlab matrix indexing


【解决方案1】:

首先,如果您使用的是 x,y 表示法,则不是n1=size(A,2); n2=size(A,1)

其次,使用meshgrid获取两个维度的所有索引:

[X,Y] = meshgrid(subx,suby)

A_sub = A(X(:),Y(:));

【讨论】:

    【解决方案2】:

    我认为有一种简洁(不打扰size())的方式来写这篇文章

    设置xposyposrange

    A_sub = A(max(1,xpos-range):min(end,xpos+range),max(1,ypos-range):min(end,ypos+range))
    

    应该做的伎俩

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多