Matlab 如何根据特定行对矩阵进行排序?
我有一个由pop=[pop;x;y;z;cst,fr]生成的总体;其中前4行是x,第2 3行是y,第3 8行是z。cst是第1列的总和,fr是第2列的计算故障率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
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一无所知,在这方面我帮不了你。