如何在Matlab中用逗号分隔矩阵的元素

时间:2016-06-10 04:25:34

标签: matlab matrix

我想用逗号分隔下面矩阵中的每个元素。

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

提前感谢您的建议。

1 个答案:

答案 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将沿着一列向下走,以便将矩阵元素与格式说明符配对。

编辑:Stewie Griffin关于转置操作的正确性(.') - 代码已得到纠正。