2012-03-01 2 views
0

клеток Рассмотрим следующий пример:Рейтинг массива

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 должна читать «Data2» Data3 '19.2; и последняя «строка» должна читать «Data1» Data4 '49.6.

Есть ли способ для этого?

ответ

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] 
Смежные вопросы