单元阵列的排名

时间:2012-03-01 10:04:24

标签: 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 = multiplied';
Final = [CombnsName, multiplied];
Rankd = sort(cell2mat(multiplied));

这里,Final代表通过乘以'Name1'的每个可能组合而获得的值。现在,我试图找到一种方法来改变'Final'的顺序以对应于'Rankd'定义的排名顺序。例如,Final的第一个'line'应该是'Data2'Data3'19.2;最后一行''应该是'Data1'Data4'49.6。

有没有这样做的方法?

1 个答案:

答案 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]