2014-06-28 84 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