Hay una forma conveniente de mostrar una matriz con rótulos de fila y columna en el Matlab terminal? Algo como esto:

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

rendimiento:

        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

Sería aún mejor algo con algunos ASCII-art sutilezas:

     |   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
  • Esta pregunta es a partir de 2011, aceptado respuesta de 2012. Matlab2013b introdujo el table tipo de datos, que hace exactamente lo que se les pide en la pregunta original (véase la respuesta por Sh3ljohn).
  • Cabe señalar que ninguna de las soluciones a continuación están disponibles para la Octava, así que he publicado mi propia pregunta aquí.
InformationsquelleAutor nibot | 2011-07-01

6 Comentarios

  1. 19

    Matlab dispone de una función llamada printmat en los Sistemas de Control de la caja de herramientas. Es en el directorio «ctrlobsolete«, por lo que podemos asumir que es considerado como «obsoleto», pero todavía funciona.

    El texto de ayuda es:

    >> 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.

    Ejemplo:

    >> 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
  2. 13

    Parece que los datos tienen una estructura de modo que usted puede poner en una forma más estructurada de la clase – un conjunto de datos, parte de las Estadísticas de la caja de herramientas.

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

    De forma alternativa, si la publicación de su salida, aquí es un ejemplo de varias funciones que llevará a una matriz w/row,col nombres y producir un html en formato de tabla.

    • Sólo añadir que Matlab añadido un tabla tipo de datos en 2013b), que es similar a la dataset, pero no requiere la caja de herramientas estadísticas
  3. 9

    Sé que este es un viejo post, pero creo que la solución es el uso de array2table. Específicamente en el caso de la OP, uno podría simplemente hacer:

    >> 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
  4. 3

    Aquí es una rápida y sucia de enfoque:

    horzcat({'';'ROW1';'ROW2';'ROW3';'ROW4';'ROW5'}, ...
            vertcat({'FOO','BAR','BAZ','BUZZ','FUZZ'},...
                    num2cell(rand(5))))

    rendimiento:

    ans = 
    
        ''        'FOO'       'BAR'       'BAZ'       'BUZZ'      'FUZZ'  
        'ROW1'    [0.3015]    [0.6665]    [0.0326]    [0.3689]    [0.6448]
        'ROW2'    [0.7011]    [0.1781]    [0.5612]    [0.4607]    [0.3763]
        'ROW3'    [0.6663]    [0.1280]    [0.8819]    [0.9816]    [0.1909]
        'ROW4'    [0.5391]    [0.9991]    [0.6692]    [0.1564]    [0.4283]
        'ROW5'    [0.6981]    [0.1711]    [0.1904]    [0.8555]    [0.4820]
    • los soportes son una gran distracción.
  5. 1

    Mateo Oberhardt, útil código, he añadido el nombre de la matriz, aquí está el nuevo código tan simple acaba de agregar una variable más
    Y también dejo un ejemplo para usar, observe que p es una matriz de mxn.

    —————CÓDIGO—————

    function out = dispmat(M,name,row_labels,col_labels);
    %% Matthew Oberhardt 
    % 02/08/2013
    % intended to display a matrix along with row and column labels. 
    %% ex:
    % M = rand(2,3);
    % row_labels = {'a';'b'};
    % col_labels = {'c 1','c2 ','c3'};
    % % if there are no labels for rows or cols, put '' as the input.
    % row_labels = '';
    %Modified 14.07.2014
    %Nestor Cantu
    %Added the name of the matrix.
    %% check that the row & col labels are the right sizes
    [nrows,ncols] = size(M);
    %% populate if either of the inputs is empty 
    if isempty(row_labels)
    row_labels = cell(1,nrows);
    for n = 1:nrows
    row_labels{1,n} = '|'; 
    end
    end
    if isempty(col_labels)
    col_labels = cell(1,ncols);
    for n = 1:ncols
    col_labels{1,n} = '-';
    end
    end
    assert(length(row_labels)==nrows,'wrong # of row labels');
    assert(length(col_labels)==ncols,'wrong # of col labels');
    row_labels = reshape(row_labels,1,length(row_labels));
    col_labels = reshape(col_labels,1,length(col_labels));
    %% remove spaces (since they are separators in printmat.m
    cols = strrep(col_labels, ' ', '_');
    rows = strrep(row_labels, ' ', '_');
    %% create labels, space delimited
    c_out = [];
    for n = 1:length(cols)
    c_out = [c_out,cols{n},' '];
    end
    c_out = c_out(1:end-1);
    r_out = [];
    for n = 1:length(rows)
    r_out = [r_out,rows{n},' '];
    end
    r_out = r_out(1:end-1);
    %% print
    printmat(M,name,r_out,c_out)
    end

    ———-EJEMPLO de matriz conv(5,4)————–

    [m n] = size(conv);
    for i=1:n
    col{i} = ['K = ' num2str(i)];
    end
    for i=1:m
    row{i} = ['n =' num2str(i)];
    end
    outMat(conv,'Convergence',row',col);

    ————–RESULTADO————————–

    Convergence = 
    K_=_1        K_=_2        K_=_3        K_=_4        K_=_5
    n_=1      0.74218      0.42070      0.11101 9.86259e-006 9.86259e-006
    n_=2      0.49672      0.26686      0.00233 4.46114e-011 4.46114e-011
    n_=3      0.01221      0.00488 1.23422e-007            0            0
    n_=4      0.00010 7.06889e-008 7.06889e-008            0            0
  6. 0

    He escrito algún código que pueda ser de ayuda — usa el ‘printmat función, pero los cambios de las entradas por lo que son células de vectores que contenga la columna &/o etiquetas de fila. espero que sea útil.

    function out = dispmat(M,row_labels,col_labels);
    %% Matthew Oberhardt
    % 02/08/2013
    % intended to display a matrix along with row and column labels.
    % % ex:
    % M = rand(2,3);
    % row_labels = {'a';'b'};
    % col_labels = {'c 1','c2 ','c3'};
    % % if there are no labels for rows or cols, put '' as the input.
    % row_labels = '';
    %% check that the row & col labels are the right sizes
    [nrows,ncols] = size(M);
    %% populate if either of the inputs is empty 
    if isempty(row_labels)
    row_labels = cell(1,nrows);
    for n = 1:nrows
    row_labels{1,n} = '|'; 
    end
    end
    if isempty(col_labels)
    col_labels = cell(1,ncols);
    for n = 1:ncols
    col_labels{1,n} = '-';
    end
    end
    assert(length(row_labels)==nrows,'wrong # of row labels');
    assert(length(col_labels)==ncols,'wrong # of col labels');
    row_labels = reshape(row_labels,1,length(row_labels));
    col_labels = reshape(col_labels,1,length(col_labels));
    %% remove spaces (since they are separators in printmat.m
    cols = strrep(col_labels, ' ', '_');
    rows = strrep(row_labels, ' ', '_');
    %% create labels, space delimited
    c_out = [];
    for n = 1:length(cols)
    c_out = [c_out,cols{n},' '];
    end
    c_out = c_out(1:end-1);
    r_out = [];
    for n = 1:length(rows)
    r_out = [r_out,rows{n},' '];
    end
    r_out = r_out(1:end-1);
    %% print
    printmat(M, '',r_out,c_out)

Dejar respuesta

Please enter your comment!
Please enter your name here