Matriz de visualización con tags de fila y columna

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

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

flexible:

  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 

Aún mejor sería algo con algunas sutilezas de arte 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 

Matlab tiene una función llamada printmat en la caja de herramientas de Control Systems. Está en el directorio ” ctrlobsolete “, por lo que podemos suponer que se considera “obsoleto”, pero aún 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 

Parece que sus datos tienen cierta estructura, por lo que puede ponerlo en una clase más estructurada: un conjunto de datos , parte de la caja de herramientas Estadísticas.

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

Alternativamente, si está publicando su salida, aquí hay un ejemplo de varias funciones que tomarán una matriz con la fila, los nombres col y producirán una tabla con formato html.

Sé que esta es una publicación anterior, pero creo que la solución es usar array2table . Específicamente en el caso del OP, uno simplemente haría:

 >> M = rand(5); >> names= {'A','B','C','D','E'}; >> array2table( M, 'VariableNames', names, 'RowNames', names ) ans = ABCDE _______ _______ _______ _______ ________ 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 

Aquí hay un enfoque rápido y sucio:

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

flexible:

 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] 

Matthew Oberhardt, código útil, agregué el nombre a la matriz, aquí está el nuevo código tan simple que acaba de agregar una variable más Y también dejo un ejemplo para usarlo, observe que conv es una matriz 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 con matriz conv (5,4) ————–

 [mn] = 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 

He escrito algún código que podría ser útil: usa la función ‘printmat’, pero cambia las entradas para que sean vectores de celda que contienen la columna y / o las tags 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)