如何以更好的方式在Matlab中显示序列号?

时间:2012-04-25 14:58:05

标签: matlab number-formatting

例如,我有一个数组:

a=[1:5 8:10];

如果我使用以下方式显示它:

disp(['a = ' num2str(a)]);

结果将类似于

  

a = 1 2 3 4 5 8 9 10

这比我需要的时间太长了。我怎样才能让Matlab显示与我定义它的方式相同或尽可能接近?

更具体地说,如果我以“非正式”方式定义变量,如:

a=[1:3 4:6 8:10]

(通常应为1:6而不是1:3 4:6)

我只想让Matlab以任何一种方式显示:

1:3 4:6 8:10    or    1:6 8:10

我也不在乎它是否显示变量名或方括号。

搜索但未找到任何有用的内容。考虑手动解析它,但听起来不是一个聪明的方法。

任何建议都会非常有用,非常感谢。

3 个答案:

答案 0 :(得分:5)

执行此操作的唯一方法是创建自己的函数以显示所需格式的数组。例如,如果要以精简方式显示阵列的单调增加部分,可以使用如下函数:

function display_array(array)
    str = cellfun(@(n) {num2str(n)}, num2cell(array));
    index = (diff(array) == 1) & ([1 diff(array, 2)] == 0);
    str(index) = {':'};
    str = regexprep(sprintf(' %s', str{:}), '( :)+\s*', ':');
    disp([inputname(1) ' = [' str(2:end) ']']);
end

你会像这样使用它:

>> a = [1:5 7 9:11]  %# Define a sample array

a =

     1     2     3     4     5     7     9    10    11     %# Default display

>> display_array(a)
a = [1:5 7 9:11]     %# Condensed display
>> b = [1 2 3 4 4 4 3 2 1];  %# Another sample array
>> display_array(b)
b = [1:4 4 4 3 2 1]  %# Note only the monotonically increasing part is replaced

答案 1 :(得分:3)

为此,我使用Matlab文件交换中的vec2str。例如:

str = vec2str([1 3 5 5 9 8 7 6 5]) 
ans = 
    [1:2:5,5,9:-1:5] 

>> eval(str) 
ans = 
     1 3 5 5 9 8 7 6 5 

答案 2 :(得分:0)

不可能。 Matlab很快就抛弃了你的定义。 “对象”a根本不了解该定义。