采用以下示例:
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'定义的排名顺序。例如,Final的第一个'line'应该是'Data2'Data3'19.2;最后一行''应该是'Data1'Data4'49.6。
有没有这样做的方法?
答案 0 :(得分:1)
有几种选择。首先,您可以使用sort
的第二个输出,它会为您提供与排序数组中的条目相对应的索引:
>> [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]