0

我有一个名为 x 的坐标向量。我想获取具有最小 y 坐标的元素:

a = find(x(:,2)==min(x(:,2))); % Contains indices

这将返回 y 坐标最小的元素的索引。我说 element* s * 因为有时这会返回超过 1 个值(例如 (10,2) 和 (24,2) 都有 2 作为 y 坐标,如果 2 是最小 y 坐标...)。

无论如何,我的下一步是根据 x 坐标对具有最小 y 坐标的元素进行排序(升序)。首先我这样做:

b = sort(x(a,1));

上述操作可能会重新排列具有最小 y 坐标的元素,因此我也想将此重新排列应用于 a 。所以我这样做:

[v i] = ismember(b, x(:, 1));

不幸的是,如果存在具有相同 x 值但不同 y 值的元素,并且其中一个元素结果是 a(即 b)的成员,则上述矩阵选择它。例如,如果 (10,2) 和 (24,2) 是 y 坐标最小的元素,并且有第三个元素 (24, 13),那么它将搞砸上述操作。有没有更好的办法?我使用循环编写了我的脚本,一切都很好,但根据 Matlab 的方法我重写了它,我担心我对 matlab 的不熟悉会导致这个错误。

4

1 回答 1

1

抱歉,我可能误解了您的问题,但请重新表述一下我认为您想要的内容:您有一组 2D 坐标:

x = [24,2; 10,2; 24,13];

您希望坐标对保持在一起 (24,2) (10,2) 和 (24,13)。并且您想找到具有最小 y 坐标的坐标对,如果有多个,那么您想按 x 坐标对它们进行排序。并且您想要这些坐标对在原始矩阵中的行索引x。所以换句话说,你想要一个最终的答案:

v = [10,2; 24,2];
i = [2,1];

如果我理解正确,那么您可以这样做:

(注:我把 x 改成多了一对 (40,13) 来说明 idx(i) 和 i 的区别)

>> x = [40,13; 24,2; 10,2; 24,13];
>> idx = find(x(:,2)==min(x(:,2))) %Same as what you've done before.

idx =

     2
     3

>> [v,i] = sortrows(x(idx,:)) %Use sortrows to sort by x-coord while preserving pairings

v =

    10     2
    24     2


i = % The indices in x(idx,:)

     2
     1

>> idx(i) %The row indices in the original matrix x

ans =

     3
     2

最后,如果这不是您想要的,您能否在您给出的示例中指出您认为您的答案 [v,i] 应该是什么?

于 2012-05-13T20:19:56.730 回答