Matlab - 关系矩阵?

时间:2012-05-13 20:03:24

标签: matlab octave

我有一个名为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的不熟悉导致了这个错误。

1 个答案:

答案 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]应该在你给出的例子中吗?