如何从行和列号的矩阵中提取数据

时间:2014-06-28 11:52:49

标签: algorithm matlab search

我有一个上三角矩阵,我需要以递增的顺序提取非零数据以及相应的行和列号以在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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在matlab中有一个名为find的函数,它将返回矩阵和元素中所有非零元素的标记。 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