在MATLAB中加强矩阵的显示

时间:2011-10-27 16:13:51

标签: matlab

我想知道,除了使用format compact之外,还有一种方法可以使矩阵的显示更紧凑或更紧凑(可能是预先格式化输出的第三方软件包矩阵?)

以下是使用format compact

在MATLAB中显示的矩阵示例

enter image description here

从上图可以看出,列之间有足够的空白区域。无论每行或每列打印多少位数,列之间的空白量都是固定的。

如果矩阵的列数超过命令窗口给定宽度的单行数,则会浪费此空白区域,因为当发生这种情况时,MATLAB会将矩阵分解为多个子矩阵,这使得很难读他们:

enter image description here

附录:

format short有一点帮助,因为它只保留 4 小数的空间(见下图),但还有什么能让它更紧凑(例如让用户控制的东西)超过每个条目保留多少个字符)?

例如,比较一下

0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 0 1

使用:

enter image description here

2 个答案:

答案 0 :(得分:4)

默认间距,虽然可能由really knows what they're doing的某个人更改,但不可更改。

如果你真的需要控制事物的显示方式,我建议使用fprintf(1,'...')命令。这样你就可以尽可能多地控制它的外观。

答案 1 :(得分:1)

如果您确定条目都是0到9之间的整数(即一个字符),那么您可以使用:

fprintf([repmat('%d ',1,size(A,2)) '\n'],A');

产生类似

的东西
1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 0 1 0 
0 1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 1 0 0 0 
0 0 0 1 1 0 0 0 0 0 
0 1 0 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 0 0 
0 0 1 0 0 1 0 0 0 0 

否则对于一般整数,您可以使用

获取最严格的格式
fprintf([repmat(sprintf('%% %dd',max(floor(log10(abs(A(:)))))+2+any(A(:)<0)),1,size(A,2)) '\n'],A');

产生类似的东西:

   -111     -3     -2  31061  -2285      2  -2030     -2     -4     34
    579    -31   1166    325 -24273     22    -13     -2     -1    -40
   -150     -2  14166  39317      2     12   5119      9     -7     14
     -4     56   -937  46085   -286     44 -28914    -76  -1477 -26938
  -6661  11121    -63     -4   -275  -2014   4053   -697 -12308   -273
  -2038  -3171  72640   4887    811    252   -114   2214    176     -2
  19837  75428    -21   2038  36152    -11   3782 -33491  11082  -3628
  47025 -42492  73009   6746  -5865 -14310 -51040  -7891     -1   1652
   -223     -3   -566     -4  26892    -13  47538 -26949     -1  58930
  13166     -5    169  78945      7   4135   -681   1863    -83  -2037

您可以将它们作为函数包装起来,甚至可以按照对OP的注释中的建议使用它们来重载disp