有没有一种方便的方法可以在Matlab终端中显示带有行和列标签的矩阵? 像这样的东西:
M = rand(5);
displaymatrix(M, {'FOO','BAR','BAZ','BUZZ','FUZZ'}, ...
{'ROW1','ROW2','ROW3','ROW4','ROW5'}); %??
产量:
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
更好的是带有一些 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 在控制系统工具箱中有一个名为
printmat
的函数。 它位于目录“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.
示例:
>> 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
看起来您的数据具有一定的结构,因此您可以将其放入更结构化的类中 - 数据集,统计工具箱的一部分。
>> 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
或者,如果您要发布输出,这里是几个函数的一个示例,这些函数将采用带有行、列名称的矩阵并生成 html 格式的表格。
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
这是一种快速但肮脏的方法:
horzcat({'';'ROW1';'ROW2';'ROW3';'ROW4';'ROW5'}, ...
vertcat({'FOO','BAR','BAZ','BUZZ','FUZZ'},...
num2cell(rand(5))))
产量:
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,有用的代码,我将名称添加到矩阵中,这就是新代码,非常简单,只需添加一个变量 我还举了一个例子来使用它,请注意 conv 是一个 mxn 矩阵。
--------------代码--------------
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
----------矩阵 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);
--------------结果--------------------------
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
我编写了一些可能有用的代码——它使用“printmat”函数,但更改了输入,使它们成为包含列和/或行标签的单元格向量。 希望有帮助。
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)
我推荐 FileExchange
1中的函数
displaytable
,例如:
M = rand(5);
displaytable(M, {'ROW1' 'ROW2' 'ROW3' 'ROW4' 'ROW5'}, [], [], {'FOO' 'BAR' 'BAZ' 'BUZZ' 'FUZZ'}, [], ' ')
产生:
ROW1 ROW2 ROW3 ROW4 ROW5
FOO 0.417267 0.489253 0.780252 0.131973 0.23478
BAR 0.0496544 0.337719 0.389739 0.942051 0.353159
BAZ 0.902716 0.900054 0.241691 0.956135 0.821194
BUZZ 0.944787 0.369247 0.403912 0.575209 0.0154034
FUZZ 0.490864 0.111203 0.0964545 0.0597795 0.0430238