我正在编写一个程序,将一个特定的矩阵行输出到命令窗口。但是,我需要以特定格式显示它,如下所示:
行:[2 4 6 8 10]
它应显示以下内容:
1 (2%)
2 (4%)
3 (6%)
4 (8%)
5 (10%)
而不仅仅是像往常一样在命令提示符中的答案。有谁知道在MATLAB中这样做的方法?非常感谢你。同样,我的计算正确,我只是不知道用什么工具来格式化它。
答案 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>