在MATLAB中收紧矩阵的显示

Ame*_*ina 3 matlab

我想知道,除了使用之外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
Run Code Online (Sandbox Code Playgroud)

与:

在此处输入图片说明

eyk*_*nal 5

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

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


Ale*_*son 5

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

fprintf([repmat('%d ',1,size(A,2)) '\n'],A');
Run Code Online (Sandbox Code Playgroud)

这会产生类似的东西

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 
Run Code Online (Sandbox Code Playgroud)

否则,对于一般整数,您可以使用以下方法获得最严格的格式:

fprintf([repmat(sprintf('%% %dd',max(floor(log10(abs(A(:)))))+2+any(A(:)<0)),1,size(A,2)) '\n'],A');
Run Code Online (Sandbox Code Playgroud)

它会产生类似的东西:

   -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
Run Code Online (Sandbox Code Playgroud)

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