Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将空白值导出到.txt文件-MATLAB_Matlab - Fatal编程技术网

将空白值导出到.txt文件-MATLAB

将空白值导出到.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

我目前正试图将多个长度不等的矩阵导出到一个分隔的.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
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个矩阵,其中一个矩阵并不总是大于另一个?此方法非常好且简单。不幸的是,一个矩阵并不总是比另一个大,将来我可能还要处理两个以上的矩阵。也许我可以采用这种方法。。。