首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab -关系矩阵?

Matlab -关系矩阵?
EN

Stack Overflow用户
提问于 2012-05-13 20:03:24
回答 1查看 83关注 0票数 0

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

代码语言:javascript
复制
a = find(x(:,2)==min(x(:,2))); % Contains indices

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

无论如何,我的下一步是按照最小y坐标对元素进行排序(升序)。首先,我要:

代码语言:javascript
复制
b = sort(x(a,1));

上面的操作可能会用最小的y坐标重新排列元素,所以我也想将这个重新排列应用到一个。所以我想:

代码语言:javascript
复制
[v i] = ismember(b, x(:, 1));

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-13 20:19:56

对不起,我可能误解了你的问题,但让我重新表达一下我认为你想要的:你有一组2D坐标:

代码语言:javascript
复制
x = [24,2; 10,2; 24,13];

您希望坐标对保持在一起(24,2) (10,2)和(24,13)。你想要找到有最小y坐标的坐标对,如果有倍数,那么你想按x坐标对它们排序。您需要原始矩阵x中那些坐标对的行索引。因此,换句话说,你想要一个最后的答案:

代码语言:javascript
复制
v = [10,2; 24,2];
i = [2,1];

如果我的理解是正确的,那么你就可以这样做:

(注:我将x改为多一对(40,13),以说明idx(i)与i之间的区别)

代码语言:javascript
复制
>> 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,我应该在你给出的例子中吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10574789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档