Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何根据特定行对矩阵进行排序?_Matlab_Sorting - Fatal编程技术网

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

Matlab 如何根据特定行对矩阵进行排序?,matlab,sorting,Matlab,Sorting,我有一个由pop=[pop;x;y;z;cst,fr]生成的总体;其中前4行是x,第2 3行是y,第3 8行是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

我有一个由pop=[pop;x;y;z;cst,fr]生成的总体;其中前4行是x,第2 3行是y,第3 8行是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
如何对后跟未更改(1:15,17:31,33:47)的特定(16,32,48)行进行排序? 例如:

        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

请帮忙

不清楚您想要的是什么顺序,但是如果您知道您想要这样的特定行顺序:(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
pop = []
for n = 1:3
    % calculate x, y, z, etc.
    pop=[pop;x;y;z;cst,fr];
end
可以使用各种技巧创建索引向量
n

现在,如果您正在调用循环并向
pop
添加新值,如下所示:

n = [16, 32, 48, 1:15, 17:31, 33:47]; % indexes for sorting
popsort = pop(n,:); %index into pop by rows
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

欢迎来到堆栈溢出。请尽快阅读这一页。我认为您应该确定您正在使用的支持
pop=[pop;x;y;z;cst,fr]
的语言(是R?)。您的排序标准还没有明确表示。据我所知,您希望16行的组(示例中的第16行在第1列中具有较大的值)按键编号排序,键编号是第16行中的第一个值。哪些工具可用(
awk
perl
,…)以及您使用的是哪个平台?文件有多大?嗨,我在用Matlab。pop是总体大小。它循环3次,得到3x15(x:3行、y:4行和z:8行),其中第16行是第1列的总和。我想这样排序,例如:从:a2ab c d 1cd e f 3ef到:cd 1cd a b 2ab e f 3ef希望我解释正确;这将引起了解Matlab的人的注意。这一次我已经为你们做了,但在未来,将问题引导到正确的受众会有很大帮助。我对Matlab一无所知,在这方面我帮不了你。