MATLAB排序2列:塔1度下降和塔2上升
问题描述:
我有3列阵列是这样的:MATLAB排序2列:塔1度下降和塔2上升
A = [6 -1 0;
6 0 3;
1 4 3;
1 2 5];
我需要的第一列是在降序和第二列按升序排列与第三列与其他两列改变(即它们没有排序)如下:
B = [6 -1 0;
6 0 3;
1 2 5;
1 4 3];
答
如果你正在寻找保持完好行的记录,并进行排序根据列1,然后第2列,使用sortrows()
,用负列索引来指示其值将按降序排序的列。
B = sortrows(A, [-1 2])
答
如果第三列是将保持不变,
B = A;
B(:,1) = sort(B(:,1),'descend');
B(:,2) = sort(B(:,2),'ascend');
如果你想在第三列与第二再改,
[B(:,2),ind] = sort(B(:,2),'ascend');
B(:,3) = B(ind,3);
B =
6 -1 0
6 0 3
1 2 5
1 4 3
+0
如果列A实际上独立于列B,这将工作。但是,如果这实际上是关于在记录上执行多列排序,那么这将失败,因为它会更改列A与行的关联。由于OP表示第三列要改变“与另外两列”,听起来可能是这样,退化输入集的选择掩盖了这个问题。 – 2014-12-01 22:46:49
第三列如何变化? – Rashid 2014-12-01 20:35:40
你的问题并不完全清楚:如果行保持不变(例如,在第一种排序最重要,然后第二列显示'子排序'的多种排序中),或者排序的顺序第3列(和其他可能的列)无关紧要? – 2014-12-01 20:44:36
我更新了帖子。第三列不会按照示例数组B中所示排序。 – jm4smtddd 2014-12-01 20:53:48