我有一个名为x的坐标向量。我想得到最小y坐标的元素:
a = find(x(:,2)==min(x(:,2))); % Contains indices这将返回具有最小y坐标的元素的索引。我说元素*s*,因为有时这会返回多于1的值(例如(10,2)和(24,2)都有2作为y坐标,如果2是最小y坐标.)。
无论如何,我的下一步是按照最小y坐标对元素进行排序(升序)。首先,我要:
b = sort(x(a,1));上面的操作可能会用最小的y坐标重新排列元素,所以我也想将这个重新排列应用到一个。所以我想:
[v i] = ismember(b, x(:, 1));不幸的是,如果存在具有相同x值但y值不同的元素,并且其中一个元素最终是a(即b)的成员,那么上面的矩阵会选择它。例如,如果(10,2)和(24,2)是具有最小y坐标的元素,并且有第3元素(24,13),那么它将搞乱上述操作。有更好的办法吗?我使用循环编写了我的脚本,一切都很好,但是按照matlab的方法,我重写了它,我担心我对matlab的不熟悉导致了这个错误。
发布于 2012-05-13 20:19:56
对不起,我可能误解了你的问题,但让我重新表达一下我认为你想要的:你有一组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,我应该在你给出的例子中吗?
https://stackoverflow.com/questions/10574789
复制相似问题