紧凑显示MATLAB矩阵

3
我想知道除了使用format compact之外,是否有一种方法可以使矩阵的显示更加紧凑(也许是一种第三方软件包,可以预先格式化矩阵的输出)?
以下是在MATLAB中使用format compact显示的矩阵示例。
如上图所示,列之间有大量的空白。不管每行或每列打印多少个数字,列之间的空白都是固定的。
如果矩阵的列数超过了命令窗口给定宽度下的单行表示,则这些空白就被浪费了,因为当这种情况发生时,MATLAB会将矩阵分成几个子矩阵,使其难以阅读。 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


1
你可以重载你正在使用的数值类的 disp 方法。但这可能会有些混乱。 - Jonas
2个回答

6

默认间距可能可以被真正知道自己在做什么的人更改,但不可更改。

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


5

如果你确定输入的都是介于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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接