如何以特定格式

时间:2015-10-10 20:41:35

标签: matlab formatting format string-formatting

我正在编写一个程序,将一个特定的矩阵行输出到命令窗口。但是,我需要以特定格式显示它,如下所示:

行:[2 4 6 8 10]

它应显示以下内容:

1 (2%)

2 (4%)

3 (6%)

4 (8%)

5 (10%)

而不仅仅是像往常一样在命令提示符中的答案。有谁知道在MATLAB中这样做的方法?非常感谢你。同样,我的计算正确,我只是不知道用什么工具来格式化它。

2 个答案:

答案 0 :(得分:1)

rowc = [2 4 6 8 10];
A = [1:numel(rowc);rowc];
str = sprintf('%d (%d%%) \n',A);
disp(str)
1 (2%) 
2 (4%) 
3 (6%) 
4 (8%) 
5 (10%) 

sprintf让您以任何您想要的格式创建字符串,请查看文档以了解有关数字标题和特殊字符的详细信息。

显然sprintf的行为是从C继承的,因此它将访问您在其中插入的任何变量作为一个长的单列向量(即A(:),这称为linear indexing )。意味着无论您输入两个行向量还是两个列向量,此代码都不起作用。因此, 应该创建输入作为考虑线性索引的正确矩阵,因此需要额外的行来声明A

答案 1 :(得分:1)

您可以使用arrayfun循环遍历数组中的每个元素,然后使用sprintf对其进行正确格式化。您需要的格式是

sprintf('%d (%d%%)\n\n', x, y)

其中x是前导值,y是括号内的值。然后使用arrayfun我们

>> cell2mat(arrayfun(@(x, y) sprintf('%d (%d%%)\n\n', x, y), 1:numel(rowc), rowc, 'UniformOutput', false))
ans =

1 (2%)

2 (4%)

3 (6%)

4 (8%)

5 (10%)

其中rowc = [2 4 6 8 10];

如果前导值应除以2

,则使用单个输入函数的另一种更简单的方法
>> cell2mat(arrayfun(@(x) sprintf('%d (%d%%)\n\n', x / 2, x), rowc, 'UniformOutput', false))
ans =

1 (2%)

2 (4%)

3 (6%)

4 (8%)

5 (10%)

注意:当arrayfun'UniformOutput', false一起使用时,输出是一个单元格数组,我们可以使用cell2mat将其转换为字符串矩阵。< / p>