【问题标题】:How to extract data from matrix with row and column numbers如何从具有行号和列号的矩阵中提取数据
【发布时间】:2014-06-28 21:06:09
【问题描述】:

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

非常感谢您的帮助。

【问题讨论】:

    标签: algorithm matlab search


    【解决方案1】:

    使用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
    

    【讨论】:

    • 完美!非常感谢路易斯。
    【解决方案2】:

    在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
    

    【讨论】:

    • 非常感谢您通过我的示例说明该函数的使用。
    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2014-08-07
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多