2014-06-28 83 views
0

我有一個上三角矩陣,我需要從中提取非零數據的遞增順序以及對應的行和列號用於其餘的matlab程序 - 有人可以請建議一個有效的方式來做到這一點。如何從行和列號的矩陣中提取數據

作爲例證,在這裏是矩陣的一個例子,我可以有:

0 16.38028519 57.19639932 109.1383791 168.7622095 
0 0   12.41026354 41.10752608 80.27145093 
0 0   0   8.356508551 29.60683208 
0 0   0   0   6.510638154 
0 0   0   0   0 

我需要一個輸出:

Data   Row Num Col Num 
6.510638154   4 5 
8.356508551   3 4 
12.41026354   2 3 
16.38028519   1 2 
29.60683208   3 5 
41.10752608   2 4 
57.19639932   1 3 
80.27145093   2 5 
109.1383791   1 4 
168.7622095   1 5 

矩陣的大小可以碰上100的 - 那麼一個快速的算法會產生巨大的差異。

很多感謝您的幫助。

回答

2

使用find獲取行,列和值;然後sortrows根據值進行排序:

[ii jj vv] = find(A); %// "A" denotes your matrix 
result = sortrows([vv ii jj], 1); %// "1" to sort rows according to column 1 
+0

完美!許多感謝路易斯。 – user3785820

0

有一個在MATLAB稱爲查找功能將在矩陣元素返回所有非零ELEM的indicis。 http://www.mathworks.com/help/matlab/ref/find.html 這裏是你的矩陣的例子。

A = [0 16.38028519 57.19639932 109.1383791 168.7622095;0 0 12.41026354 41.10752608 

80.27145093;0 0 0 8.356508551 29.60683208;0 0 0 0 6.510638154;0 0 0 0 0]; 
[r,c,v] = find(A); 
B(:,1) = v(:); 
B(:,2) = r(:); 
B(:,3) = c(:); 

disp(' Data  RowNum ColNum'); 
disp(sortrows(B,1)); 

這裏是出放:

>> printtable 
    Data  RowNum ColNum 
    6.5106 4.0000 5.0000 
    8.3565 3.0000 4.0000 
    12.4103 2.0000 3.0000 
    16.3803 1.0000 2.0000 
    29.6068 3.0000 5.0000 
    41.1075 2.0000 4.0000 
    57.1964 1.0000 3.0000 
    80.2715 2.0000 5.0000 
    109.1384 1.0000 4.0000 
    168.7622 1.0000 5.0000 
+0

很多感謝用我的例子來說明函數的用法。 – user3785820