Existe-t-il un moyen pratique d’afficher une matrice avec des étiquettes de ligne et de colonne dans le terminal Matlab? Quelque chose comme ça:
M = Rand(5);
displaymatrix(M, {'FOO','BAR','BAZ','BUZZ','FUZZ'}, ...
{'ROW1','ROW2','ROW3','ROW4','ROW5'}); %??
cédant:
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
Encore mieux serait quelque chose avec quelques subtilités artistiques 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 a une fonction appelée printmat
dans la boîte à outils Systèmes de contrôle. C'est dans le répertoire "ctrlobsolete
", on peut donc supposer qu'il est considéré "obsolète", mais cela fonctionne toujours.
Le texte d'aide est:
>> 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.
Exemple:
>> 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
Il semble que vos données aient une structure, vous pouvez donc les placer dans une classe plus structurée - un dataset , qui fait partie de la boîte à outils Statistiques.
>> 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
Alternativement, si vous publiez votre sortie, voici un exemple de plusieurs fonctions qui prendront une matrice avec des noms de rangées, de colonnes et produiront un tableau au format HTML.
Je sais que ceci est un ancien post, mais je pense que la solution consiste à utiliser array2table
. Dans le cas du PO, on ferait simplement:
>> 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
Voici une approche rapide et sale:
horzcat({'';'ROW1';'ROW2';'ROW3';'ROW4';'ROW5'}, ...
vertcat({'FOO','BAR','BAZ','BUZZ','FUZZ'},...
num2cell(Rand(5))))
cédant:
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, code utile, j’ai ajouté le nom à la matrice, le nouveau code si simple vient d’ajouter une autre variable.
---------------CODE---------------
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
---------- EXEMPLE avec matrice 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);
--------------RÉSULTAT--------------------------
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
J'ai écrit du code qui pourrait être utile - il utilise la fonction 'printmat', mais modifie les entrées afin qu'elles soient des vecteurs de cellules contenant les étiquettes de colonne et/ou de ligne. J'espère que c'est utile.
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)