我想用逗号分隔下面矩阵中的每个元素。
1 2 3
4 5 6
7 8 9
这是我的尝试:
s= sprintf('%.17g,',matrix)
输出继电器= 1,2,3,4,5,6,7,8,9,
期望的输出:
1, 2, 3
4, 5, 6
7, 8, 9
提前感谢您的建议。
答案 0 :(得分:1)
您只需指定整个第一行的格式:
s = sprintf('%.17g, %.17g, %.17g\n',matrix.')
只要matrix
中有剩余元素,MATLAB就会继续重复使用格式化字符串。
要概括此过程,请使用以下表达式:
s = sprintf([strjoin(repmat({'%.17g'},1,size(matrix,2)), ', ') '\n'], matrix.')
所以在这一行中有很多事情要发生 - 让我们从里面解开它:
repmat({'%.17g'},1,size(matrix,2))
此子表达式采用大小为1x1的单个单元格数组,其中包含字符串%.17g
,并将其复制到具有由接下来的两个参数指定的维度的单元格数组中。我们想要构造一个单行的单元格数组(因此参数1
)代表我们需要的所有格式说明符(%...
)。由于我们希望每列有一个%.17g
实例,因此我们使用size(matrix,2)
作为repmat
的最后一个参数,因为它返回矩阵的列数。
例如,如果您有5列,则可以得到:
>> repmat({'%.17g'},1,5)
ans =
'%.17g' '%.17g' '%.17g' '%.17g' '%.17g'
接下来,由于您希望以逗号和空格分隔的列,因此可以使用strjoin()
:
>> strjoin(repmat({'%.17g'},1,5), ', ')
ans =
%.17g, %.17g, %.17g, %.17g, %.17g
注意使用逗号和几个空格作为strjoin()
的第二个参数(分隔字符串)。根据显示需要调整空间数。我们还需要一个能够打印多行矩阵的东西 - 回车。为此,我们使用方括号[]
中的两个字符串由MATLAB连接的事实:
[strjoin(repmat({'%.17g'},1,size(matrix,2)), ', ') '\n']
这会产生我们需要的最终格式化字符串。剩下的就是添加sprintf
并传入matrix
参数。正如Rijul Sudhir指出的那样,你必须转置你的矩阵,因为MATLAB将沿着一列向下走,以便将矩阵元素与格式说明符配对。
(.')
- 代码已得到纠正。