2014-04-25 75 views
-1

這第一個矩陣表1包含標準化的值。我需要在這個矩陣上執行一些操作,我必須獲得如表2所示的第二個矩陣。在MATLAB中使用排序命令的矩陣操作

表2的對角線元素應該通過對每個值給予排名(有序值)來獲得。這意味着最高元素被給予第5等級和接下來的第4等第3等等。

通過對從4開始的每個值給予等級而獲得的剩餘表格元素,因爲只剩下4個元素。因爲我們已經給出了對角元素的等級。零應該保持原樣。假設以table1爲矩陣,table2爲B矩陣。

OPERATION1:For diagonal elements 

    B(1,1)=5(first largest element) 
    B(2,2)=1(5th largest element) 
    B(3,3)=4(4th largest element) 
    B(4,4)=2(2nd largest element) 
    B(5,5)=3(3rd largest element) 

OPERATION2:For remaining elements 
    B(1,2)=3(2nd largest element) 
    B(1,3)=4(1st largest element) 
    B(1,4)=1(4th largest element) 
    B(1,5)=2(3rd largest element) 

等等..

Table1: 
    1.0000 0.2727  0.3182  0.0455 0.2727 
    0.2727 0.2727   0   0   0 
    0.3182  0   0.4545  0.1818  0 
    0.0455  0   0.1818  0.2727  0.0909 
    0.2727  0    0  0.0909 0.3636 

    Source code: 
    for i = 1:5 
    for j = 1:5 
    if i == j 
    [~, ii] = sort(diag(y)); 
    [~, jj] = sort(ii); 
    table2 = diag(jj); 
    elseif y(i,j)==0 
    table2(i,j)=0; 
    else 
     [~, ij] = sort(y); 
     [~, ij] = sort(ij); 
     table2 = ij; 
      end 
     end 
    end 

I got this output for above code 
    5  0  0  0  0 
    0  1  0  0  0 
    0  0  4  0  0 
    0  0  0  2  0 
    0  0  0  0  3 

但我需要下面的輸出。表2:

5 3 4 1 2 
    4 1 0 0 0 
    4 0 4 3 0 
    2 0 4 2 3 
    4 0 0 3 3 

回答

1

這裏是一個解決方案(沒有任何環):

E = logical(eye(size(table1))); % create a mask for the two different rules 
% rule 1: diagonal elements first 
table2 = zeros(size(table1)); % create result matrix 
[~,jj] = sort(table1(E)); 
[~,ii] = sort(jj); 
table2(E) = ii; % assign rank of diagonal elements 
% rule 2: rest of the matrix 
E = ~E; 
B = reshape(table1(E),size(table1,1)-1,size(table1,2))'; % B is the matrix of table1 without diagonal elements 
[~,jj] = sort(B,2); % sort along column dimension, 
[~,ii] = sort(jj,2); 
table2 = table2'; % matlab is column-major, so you have to transpose the dest matrix before putting in the elements 
table2(E) = reshape(ii',[],1); 
table2 = table2'; % transpose back, done. 
% treat zeros apart: 0 has rank 0 
table2(table1==0) = 0; 

有些元素可能有不同的等級,從你所預期的:它們共享相同的值;所以他們的級別選擇相當隨意。 Matlab有一個穩定的排序,所以第一個元素的排名要高於下一個具有相同值的元素。

+0

雅得到了Bentoy先生,使其工作正確。 – prash2