将空白值导出到.txt文件-MATLAB
我目前正试图将多个长度不等的矩阵导出到一个分隔的.txt文件中,因此我一直在用0填充较短的矩阵,以便将空白值导出到.txt文件-MATLAB,matlab,Matlab,我目前正试图将多个长度不等的矩阵导出到一个分隔的.txt文件中,因此我一直在用0填充较短的矩阵,以便dlmwrite可以使用horzcat而不会出错: dlmwrite(filename{1},[a,b],'delimiter','\t') 然而,理想情况下,我不希望0出现在.txt文件本身中,而是将条目留空 当前.txt文件如下所示: 55875 3.1043e+05 56807 3.3361e+05 57760 3.8235e+05 58823 4.2869e+05 599
dlmwrite
可以使用horzcat
而不会出错:
dlmwrite(filename{1},[a,b],'delimiter','\t')
然而,理想情况下,我不希望0出现在.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
但我希望它看起来像这样:
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
,这意味着我不需要具有长度相等的矩阵?如果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阶段:从列向量输入
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\u 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);
我正试图一步一步地实现它以理解它。在执行p1和第一个dlmwrite后,它返回错误:使用dlmwrite时出错(第112行)。输入单元格数组无法转换为矩阵。(当使用我自己的输入数据时)。@Annashumann检查最后添加的另一种方法,如果有效的话?这似乎非常有效。这里有很多需要理解的东西!例如,您如何将其扩展到处理3个输入矩阵而不是2个?此方法是否适用于长度不等的3个矩阵,其中一个矩阵并不总是大于另一个?此方法非常好且简单。不幸的是,一个矩阵并不总是比另一个大,将来我可能还要处理两个以上的矩阵。也许我可以采用这种方法。。。