我目前正在尝试将多个不等长度的矩阵导出到分隔的.txt文件中,因此我一直用0填充较短的矩阵,以便dlmwrite
可以使用horzcat
而不会出错:
dlmwrite(filename{1},[a,b],'delimiter','\t')
但理想情况下,我不希望零出现在.txt文件中 - 而是将条目留空。
目前.txt文件如下所示:
55875 3.1043e+05
56807 3.3361e+05
57760 3.8235e+05
58823 4.2869e+05
59913 4.3349e+05
60887 0
61825 0
62785 0
63942 0
65159 0
66304 0
67509 0
68683 0
69736 0
70782 0
但我希望它看起来像这样:
55875 3.1043e+05
56807 3.3361e+05
57760 3.8235e+05
58823 4.2869e+05
59913 4.3349e+05
60887
61825
62785
63942
65159
66304
67509
68683
69736
70782
反正我能做到吗?是否有dlmwrite
的替代方法,这意味着我不需要具有相同长度的矩阵?
答案 0 :(得分:3)
如果a总是比b长,你可以将矢量a分成两个与矢量b相同长度的矢量,其余的是:
a = [1 2 3 4 5 6 7 8]';
b = [9 8 7 ]';
len = numel(b);
dlmwrite( 'foobar.txt', [a(1:len), b ], 'delimiter', '\t' );
dlmwrite( 'foobar.txt', a(len+1:end), 'delimiter', '\t', '-append');
答案 1 :(得分:2)
您可以读取数字数据并转换为字符串,然后添加适当的空格以将最终输出作为基于字符串的单元格数组,您可以轻松地将其写入输出文本文件。
阶段1:获取与列向量输入a
,b
,c
等数字数据相对应的字符串单元格 -
%// Concatenate all arrays into a cell array with numeric data
A = [{a} {b} {c}] %// Edit this to add more columns
%// Create a "regular" 2D shaped cell array to store the cells from A
lens = cellfun('length',A)
max_lens = max(lens)
A_reg = cell(max_lens,numel(lens))
A_reg(:) = {''}
A_reg(bsxfun(@le,[1:max_lens]',lens)) = cellstr(num2str(vertcat(A{:}))) %//'
%// Create a char array that has string data from input arrays as strings
wsp = repmat({' '},max_lens,1) %// Create whitespace cell array
out_char = [];
for iter = 1:numel(A)
out_char = [out_char char(A_reg(:,iter)) char(wsp)]
end
out_cell = cellstr(out_char)
阶段2:现在,您有out_cell
作为要写入文本文件的字符串的单元格数组,接下来有两个选项可供写入操作本身使用。
选项1 -
dlmwrite('results.txt',out_cell(:),'delimiter','')
选项2 -
outfile = 'results.txt';
fid = fopen(outfile,'w');
for row = 1:numel(out_cell)
fprintf(fid,'%s\n',out_cell{row});
end
fclose(fid);