我想知道,除了使用format compact
之外,还有一种方法可以使矩阵的显示更紧凑或更紧凑(可能是预先格式化输出的第三方软件包矩阵?)
以下是使用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
使用:
答案 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
。