我有一个上三角矩阵,我需要以递增的顺序提取非零数据以及相应的行和列号以在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 - 所以一个快速的算法会产生巨大的差异。
非常感谢您的帮助。
答案 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