string - MATLAB中的num2str自动宽度格式

时间:2018-02-22 14:22:41

标签: arrays matlab matrix center

对不起我的愚蠢问题,我是matlab的新手。 我有一个像这样的矩阵数组

num = [
    4.2, 3, 5;
    3, 12.1, 3.4;
    2, 5.22, 4
]

我只想使用中心对齐格式显示它,如下面的示例

enter image description here

num 数组中的数字是动态的,有时每行最多包含4个或更多这样的数字

num = [
    4.2, 3, 5, 7.899;
    3, 12.1, 3.4, 89;
    2, 5.22, 4, 9.1
]

我正在尝试使用 num2str()功能,但它不适合我的情况,因为我的数据是动态的(有时它总是有2或3个十进制数字)这里是我的代码:

num2str('%10.1f \t %10.1f \t %10.1f \n', num);

除了使用num2str()之外还有其他功能吗,因为我的数组数据是动态的

1 个答案:

答案 0 :(得分:4)

您可以使用strjust将字符串居中。在这里,我使用sprintf在循环中构建单个元素,并添加换行符:

num = [
4.2, 3, 5, 7.899;
3, 12.1, 3.4, 89;
2, 5.22, 4, 9.1
];

% Loop over rows (ii) and columns (jj) of num
output = '';
for ii = 1:size(num,1)
  for jj = 1:size(num,2)
    output = [output, strjust(sprintf('%10.4g',num(ii,jj)),'center')];
  end % for jj
  output = [output, '\n'];
end % for ii
fprintf(output)

输出:

   4.2        3         5       7.899   
    3        12.1      3.4        89    
    2        5.22       4        9.1    

你可以把它放到例如通过使用sprintf的最终调用来形成图像:

text(0.5, 0.5, sprintf(output))

请注意,这使用非固定宽度的字体,因此长行可能看起来不是中心对齐的。这可以通过使用

来看出
num = [999, 999, 999, 999; 1, 1, 1, 1];

MATLAB版本R2014a。