Matlab 单元数组的排序
以以下为例:Matlab 单元数组的排序,matlab,cell,ranking,Matlab,Cell,Ranking,以以下为例: clear all Name1 = {'Data1','Data2','Data3','Data4'}; Data = {6.2,6,3.2,8}; CombnsName = nchoosek(Name1,2); CombnsData = nchoosek(Data,2); for i = 1:length(CombnsData); multiplied{i} = CombnsData{i,1}.*CombnsData{i,2}; end multiplied = mul
clear all
Name1 = {'Data1','Data2','Data3','Data4'};
Data = {6.2,6,3.2,8};
CombnsName = nchoosek(Name1,2);
CombnsData = nchoosek(Data,2);
for i = 1:length(CombnsData);
multiplied{i} = CombnsData{i,1}.*CombnsData{i,2};
end
multiplied = multiplied';
Final = [CombnsName, multiplied];
Rankd = sort(cell2mat(multiplied));
这里,Final表示将“Name1”的每个可能组合相乘得到的值。现在,我试图找到一种方法来改变“Final”的顺序,使之与“Rankd”定义的排名顺序相对应。例如,期末考试的第一行应为“Data2”Data3“19.2”;最后一行应该是'Data1'Data4'49.6
有没有这样做的方法?有两种选择。首先,您可以使用排序的第二个输出,它为您提供与排序数组中的条目对应的索引:
>> [Rankd Index] = sort(cell2mat(multiplied));
然后呢
>> Final(Index,:)
ans =
'Data2' 'Data3' [19.200000000000003]
'Data1' 'Data3' [19.840000000000003]
'Data3' 'Data4' [25.600000000000001]
'Data1' 'Data2' [37.200000000000003]
'Data2' 'Data4' [ 48]
'Data1' 'Data4' [49.600000000000001]
但是,更简单的方法是使用函数sortrows
,该函数正是为这种情况而设计的:
>> sortrows(Final,3)
ans =
'Data2' 'Data3' [19.200000000000003]
'Data1' 'Data3' [19.840000000000003]
'Data3' 'Data4' [25.600000000000001]
'Data1' 'Data2' [37.200000000000003]
'Data2' 'Data4' [ 48]
'Data1' 'Data4' [49.600000000000001]