我有一个名为x的坐标向量。我想获得具有最小y坐标的元素:
a = find(x(:,2)==min(x(:,2))); % Contains indices
返回y坐标最小的元素的索引。我说元素* s *因为有时会返回多于1的值(例如(10,2)和(24,2)都有2作为y坐标,如果2是最小y坐标。 ..)。
无论如何,我的下一步是根据x坐标用最小y坐标对元素进行排序(升序)。首先我做:
b = sort(x(a,1));
上述操作可能会使用min y坐标重新排列元素,因此我也想将此重新排列应用于a。所以我这样做:
[v i] = ismember(b, x(:, 1));
不幸的是,如果存在具有相同x值但y值不同的元素,并且这些元素中的一个证明是a的成员(即b),则上述矩阵选择它。例如,如果(10,2)和(24,2)是具有最小y坐标的元素并且存在第三元素(24,13),那么它将弄乱上述操作。有没有更好的办法?我使用循环编写了我的脚本,一切都很好,但是根据Matlab的方法,我重写了它,我担心我对matlab的不熟悉导致了这个错误。
答案 0 :(得分: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]应该在你给出的例子中吗?