我有一个500×1字符串矩阵S
和一个500×1矩阵的数字N
。我想在变量编辑器中看到它们,像这样:如何在MATLAB中一起显示字符串和数字?
S(1) N(1)
S(2) N(2)
...
S(500) N(500)
这可能吗?
我有一个500×1字符串矩阵S
和一个500×1矩阵的数字N
。我想在变量编辑器中看到它们,像这样:如何在MATLAB中一起显示字符串和数字?
S(1) N(1)
S(2) N(2)
...
S(500) N(500)
这可能吗?
对于您的问题,只需将数字转换为单元格即可。你将有一个数组编辑器可以处理的变量。
X = [ S num2cell(N) ];
更广泛地说,下面是一个面向阵列的sprintf变体,可用于显示从并行数组构造的记录。你会这样称呼它。我使用类似的东西来显示表格数据。
sprintf2('%-*s %8g', max(cellfun('prodofsize',S)), S, N)
以下是函数。
function out = sprintf2(fmt, varargin)
%SPRINTF2 Quasi-"vectorized" sprintf
%
% out = sprintf2(fmt, varargin)
%
% Like sprintf, but takes arrays of arguments and returns cellstr. This
% lets you do formatted output on nonscalar arrays.
%
% Example:
% food = {'wine','cheese','fancy bread'};
% price = [10 6.38 8.5];
% sprintf2('%-12s %6.2f', food, price)
% % Fancier formatting with width detection
% sprintf2('%-*s %6.2f', max(cellfun('prodofsize',food)), food, price)
[args,n] = promote(varargin);
out = cell(n,1);
for i = 1:n
argsi = grab(args, i);
out{i} = sprintf(fmt, argsi{:});
end
% Convenience HACK for display to command line
if nargout == 0
disp(char(out));
clear out;
end
function [args,n] = promote(args)
%PROMOTE Munge inputs to get cellstrs
for i = 1:numel(args)
if ischar(args{i})
args{i} = cellstr(args{i});
end
end
n = cellfun('prodofsize', args);
if numel(unique(n(n > 1))) > 1
error('Inconsistent lengths in nonscalar inputs');
end
n = max(n);
function out = grab(args, k)
%GRAB Get the kth element of each arg, popping out cells
for i = 1:numel(args)
if isscalar(args{i})
% "Scalar expansion" case
if iscell(args{i})
out{i} = args{i}{1};
else
out{i} = args{i};
end
else
% General case - kth element of array
if iscell(args{i})
out{i} = args{i}{k};
else
out{i} = args{i}(k);
end
end
end
+1将数字转换为单元格数组以在变量编辑器中查看它们。我从来没有使用变量编辑器,所以我只是将所有东西都转换为字符串以便在命令窗口中查看(我不使用单元格,因为包含长字符串的单元格有时不显示数据,或者他们搞乱了格式化)。 – gnovice 2009-11-23 16:47:40
谢谢,你越来越接近我想要的东西。 – danatel 2009-11-24 22:40:14