matlab:如何选择,过滤,排序像表一样的二维数组

时间:2013-09-19 16:08:38

标签: matlab

我有

x1 = [0, 12, 0, 3, -1, 7] 
x2 = [1, -2, 1, 3, 12, 4]

任何人都知道如何做一些简单的方法,例如“选择x1,其中x1> 2和x2< 4 order by x1”? 所以,我需要:

x1 = [3, 12] 
x2 = [3, -2]

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

首先需要找到满足约束的索引

ii = x1 > 2 & x2 < 4;

然后你想要抓住那些指数的值

y1 = x1(ii);
y2 = x2(ii);

现在您需要按y1的值降序排序并保存排序顺序然后排序y2。这需要使用sort函数

的第二个输出参数
[z1, jj] = sort(y1, 'descend');
z2 = y2(jj);

这给了我一个不同的答案,但我认为[3, 12]是按升序排列的。

答案 1 :(得分:1)

值得指出sortrows的使用,因为它用于对2D数组进行排序,正如您的问题中特别要求的那样。以下是如何有选择地做到这一点:

x1 = [0, 12, 0, 3, -1, 7];
x2 = [1, -2, 1, 3, 12, 4];
x = [x1' x2']
mask = x(:,1)>2 & x(:,2)<4;
sortrows(x(mask,:),1)'

排序行中的,1表示要使用第一列x1来对矩阵进行排序。请注意在xsortrows的输出上形成转置操作。