如何根据特定行对矩阵进行排序?

时间:2013-12-08 23:35:47

标签: matlab sorting

我有一个由pop = [pop; x; y; z; cst,fr]生成的人口;其中前4行为x,后3行为y,第3行为z。 cst是第1列的总和,fr是第2列的计算失败率。

        6        0.876
        5         0.99
        3        0.939
        6        0.876
        4        0.837
        7        0.959
        4        0.953
        4        0.873
        0            0
        5         0.95
        3        0.855
        4        0.873
        4        0.873
        5         0.95
        6        0.951
       66   0.00032352            
        6        0.876
        6        0.876
        6        0.965
        6        0.965
        4        0.953
        4        0.837
        4        0.953
        0            0
        3        0.855
        6        0.951
        5         0.95
        0            0
        0            0
        3        0.855
        6        0.951
       59   0.00038143
        6        0.965
        5        0.888
        6        0.965
        3        0.863
        7        0.889
        7        0.959
        4        0.953
        7        0.915
        6        0.968
        3        0.855
        3        0.855
        8        0.942
        4        0.873
        3        0.855
        8        0.942
       80    0.0002327

如何对特定的(16,32,48)行进行排序,然后不变(1:15,17:31,33:47)? 例如:

        6        0.876
        6        0.876
        6        0.965
        6        0.965
        4        0.953
        4        0.837
        4        0.953
        0            0
        3        0.855
        6        0.951
        5         0.95
        0            0
        0            0
        3        0.855
        6        0.951
       59   0.00038143
        6        0.876
        5         0.99
        3        0.939
        6        0.876
        4        0.837
        7        0.959
        4        0.953
        4        0.873
        0            0
        5         0.95
        3        0.855
        4        0.873
        4        0.873
        5         0.95
        6        0.951
       66   0.00032352
        6        0.965
        5        0.888
        6        0.965
        3        0.863
        7        0.889
        7        0.959
        4        0.953
        7        0.915
        6        0.968
        3        0.855
        3        0.855
        8        0.942
        4        0.873
        3        0.855
        8        0.942
       80    0.0002327

请帮忙!

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你想要什么样的订单,但如果你知道你想要一些特定的行排序如下:(16,32,48)行后跟不变(1:15,17:31,33:47)然后您可以像这样使用索引:

n = [16, 32, 48, 1:15, 17:31, 33:47]; % indexes for sorting
popsort = pop(n,:); %index into pop by rows

您可以使用各种技巧来创建索引向量n

现在,如果您正在调用循环并将新值附加到pop,请执行以下操作:

pop = []
for n = 1:3
    % calculate x, y, z, etc.
    pop=[pop;x;y;z;cst,fr];
end

然后最好预先分配矩阵pop并将值放在首位,或者使用两个变量,一个包含x,y,z,另一个包含cst,fr的值为。这样可以避免以后对行进行排序:

m = 3; % works for any number of loops
pop = zeros(m*15,2);
cst_fr = zeros(m,2);
for n = 0:m-1
    % calculate x, y, z, etc.
    pop(1+n*15:15+n*15,:)=[x;y;z];
    cst_fr(n+1,:)=[cst,fr];
end