显示带行标签和列标签的矩阵

nib*_*bot 21 matlab matrix tabular matlab-table

有没有方便的方法在Matlab终端中显示带行和列标签的矩阵?像这样的东西:

M = rand(5);
displaymatrix(M, {'FOO','BAR','BAZ','BUZZ','FUZZ'}, ...
                 {'ROW1','ROW2','ROW3','ROW4','ROW5'});    %??
Run Code Online (Sandbox Code Playgroud)

收益:

        FOO       BAR       BAZ       BUZZ      FUZZ
ROW1    0.1622    0.4505    0.1067    0.4314    0.8530
ROW2    0.7943    0.0838    0.9619    0.9106    0.6221
ROW3    0.3112    0.2290    0.0046    0.1818    0.3510
ROW4    0.5285    0.9133    0.7749    0.2638    0.5132
ROW5    0.1656    0.1524    0.8173    0.1455    0.4018
Run Code Online (Sandbox Code Playgroud)

更好的是具有一些ASCII艺术细节:

     |   FOO       BAR       BAZ       BUZZ      FUZZ
-----+-------------------------------------------------
ROW1 |   0.1622    0.4505    0.1067    0.4314    0.8530
ROW2 |   0.7943    0.0838    0.9619    0.9106    0.6221
ROW3 |   0.3112    0.2290    0.0046    0.1818    0.3510
ROW4 |   0.5285    0.9133    0.7749    0.2638    0.5132
ROW5 |   0.1656    0.1524    0.8173    0.1455    0.4018
Run Code Online (Sandbox Code Playgroud)

小智 19

Matlab有一个printmat在Control Systems工具箱中调用的函数.它在目录" ctrlobsolete"中,因此我们可以假设它被认为是"过时的",但它仍然有效.

帮助文本是:

>> help printmat
 printmat Print matrix with labels.
    printmat(A,NAME,RLAB,CLAB) prints the matrix A with the row labels
    RLAB and column labels CLAB.  NAME is a string used to name the 
    matrix.  RLAB and CLAB are string variables that contain the row
    and column labels delimited by spaces.  For example, the string

        RLAB = 'alpha beta gamma';

    defines 'alpha' as the label for the first row, 'beta' for the
    second row and 'gamma' for the third row.  RLAB and CLAB must
    contain the same number of space delimited labels as there are 
    rows and columns respectively.

    printmat(A,NAME) prints the matrix A with numerical row and column
    labels.  printmat(A) prints the matrix A without a name.

    See also: printsys.
Run Code Online (Sandbox Code Playgroud)

例:

>> M = rand(5);
>> printmat(M, 'My Matrix', 'ROW1 ROW2 ROW3 ROW4 ROW5', 'FOO BAR BAZ BUZZ FUZZ' )

My Matrix = 
                       FOO          BAR          BAZ         BUZZ         FUZZ
         ROW1      0.81472      0.09754      0.15761      0.14189      0.65574
         ROW2      0.90579      0.27850      0.97059      0.42176      0.03571
         ROW3      0.12699      0.54688      0.95717      0.91574      0.84913
         ROW4      0.91338      0.95751      0.48538      0.79221      0.93399
         ROW5      0.63236      0.96489      0.80028      0.95949      0.67874
Run Code Online (Sandbox Code Playgroud)


Ric*_*h C 13

看起来你的数据有一些结构,所以你可以把它放在一个更结构化的类 - 数据集,统计工具箱的一部分.

>> M = rand(5);
>> dataset({M 'FOO','BAR','BAZ','BUZZ','FUZZ'}, ...
                'obsnames', {'ROW1','ROW2','ROW3','ROW4','ROW5'})

ans = 
            FOO        BAR         BAZ        BUZZ         FUZZ    
    ROW1    0.52853     0.68921    0.91334     0.078176     0.77491
    ROW2    0.16565     0.74815    0.15238      0.44268      0.8173
    ROW3    0.60198     0.45054    0.82582      0.10665     0.86869
    ROW4    0.26297    0.083821    0.53834       0.9619    0.084436
    ROW5    0.65408     0.22898    0.99613    0.0046342     0.39978
Run Code Online (Sandbox Code Playgroud)

或者,如果要发布输出,下面是几个函数的一个示例,它将采用矩阵w/row,col名称并生成html格式的表.


She*_*ohn 9

我知道这是一个老帖子,但我相信解决方案是使用array2table.特别是在OP的情况下,人们会这样做:

>> M = rand(5);
>> names= {'A','B','C','D','E'}; 
>> array2table( M, 'VariableNames', names, 'RowNames', names )

ans = 

            A          B          C          D          E    
         _______    _______    _______    _______    ________

    A    0.81472    0.09754    0.15761    0.14189     0.65574
    B    0.90579     0.2785    0.97059    0.42176    0.035712
    C    0.12699    0.54688    0.95717    0.91574     0.84913
    D    0.91338    0.95751    0.48538    0.79221     0.93399
    E    0.63236    0.96489    0.80028    0.95949     0.67874
Run Code Online (Sandbox Code Playgroud)