Matlab:如何从矩阵M,我可以在文本文件中使用格式S?

时间:2014-12-23 14:55:00

标签: matlab matrix text-files

M=[2    5    6
   4    8    9
   11  55    4
   89   2   47]

S = {[2    5    6],[4    8    9],[11   55    4],[89    2    47]}

如何从矩阵M,我可以在文本文件中使用格式S?

2 个答案:

答案 0 :(得分:3)

在这里拍几张照片,无论哪个都适合你!

射击#1

%// Form the cell array version of the input matrix, M
S = mat2cell(M,ones(1,size(M,1)),size(M,2))

%// Write to text file 
output_file = 'results.txt'
dlmwrite(output_file,S,' ');

代码运行 -

>> type results.txt

2 5 6
4 8 9
11 55 4
89 2 47

射击#2

如果您希望输出与单元阵列版本完全相似,则可以使用基于fprintf的解决方案 -

%// S used in this code would come from the earlier codes
output_file = 'results.txt'

fid = fopen(output_file, 'w+');
fprintf(fid, '{')                          %// Write the starting curly bracket
for ii=1:numel(S)-1
    fprintf(fid, '[%s],',num2str(S{ii}));  %// Write all data except the final cell
end
fprintf(fid, '[%s]',num2str(S{end}));  %// Write the data for final cell, 
                                        %// as it does not need any comma after it
fprintf(fid, '}')                       %// Write the ending curly bracket
fclose(fid);

代码运行 -

>> type results.txt

{[2  5  6],[4  8  9],[11  55   4],[89   2  47]}

射击#3

如果您对square brackets内的数字之间的不规则间距不太满意,可以直接使用M来替换使用{{1}的两行的S与数据 -

循环内部 -

fprintf

循环退出后 -

fprintf(fid, '[%d %d %d]',M(ii,1),M(ii,2),M(ii,3));

代码运行 -

fprintf(fid, '[%d %d %d]',M(end,1),M(end,2),M(end,3));

答案 1 :(得分:2)

单行使用mat2str进行基本工作,使用regexprepstrrep进行微调(感谢@Divakar提醒我有关后者的功能):

S = regexprep(['{' mat2str(M) '}' ], ';', '],[');

S = strrep(['{' mat2str(M) '}' ], ';', '],[');

然后,要写入文件,请使用

dlmwrite('tmp.txt', S, '')