将不等长的矢量/矩阵打印到.txt文件的简洁方法 - MATLAB

时间:2015-08-09 15:59:54

标签: matlab printf

我有三个矩阵A B C包含数字数据且长度不等(例如A=88x1B=121x1C=240x1 - 长度在数据集之间是可变的)。为了将这些打印到没有padarray的.txt文件中,并用空格填充不等长度,我一直在使用:

con = [{A} {B} {C}];
lens = cellfun('length',con);
max_length = max(lens);
con_reg = cell(max_length,numel(lens));
con_reg(:) = {''};
con_reg(bsxfun(@le,[1:max_length]',lens)) = cellstr(num2str(vertcat(con{:})));
wspace = repmat({char(9)},max_length,1);
out_str = [];
for iter = 1:numel(con)
    out_str = [out_str char(con_reg(:,iter)) char(wspace)];
end
out_cell = cellstr(out_str);
ext = '.txt';
filename = strcat((genotype{1}),'-',num2str(threshold),'bpThresh',ext);
fid1 = fopen(filename{1},'wt');
for row = 1:numel(out_cell)
    fprintf(fid1,'%s\n',out_cell{row});
end
fclose(fid1);
toc

然而,这感觉非常复杂且难以阅读。

是否有更简洁,更简单的方法来实现这一目标?

其次,我特别喜欢writetable的一个功能是能够包含列标题。我怎样才能将其纳入解决方案? writetable本身似乎明确要求相等长度的向量,从而填充。我正在研究OS X,因此使用xlswrite并不是一个可行的选择。

修改

我通过使用表格和writetable来减少必要的代码:

con = [{A} {B} {C}];
lens = cellfun('length',con);
max_length = max(lens);
con_reg = cell(max_length,numel(lens));
con_reg(:) = {''};
con_reg(bsxfun(@le,[1:max_length]',lens)) = cellstr(num2str(vertcat(con{:})));
T = cell2table(con_reg);
ext = '.txt';
filename = strcat((genotype{1}),'-',num2str(threshold),'bpThresh',ext);
writetable(T,filename{1},'Delimiter','\t');

如果可以进行任何进一步的改进,则感兴趣。

1 个答案:

答案 0 :(得分:0)

稍微修改你的代码,写成csv:

con = [{A} {B} {C}];
lens = cellfun('length',con);
max_length = max(lens);
con_reg = cell(max_length,numel(lens));
con_reg(:) = {''};
con_reg(bsxfun(@le,[1:max_length]',lens)) = cellstr(num2str(vertcat(con{:})));
% insert commas between the columns instead
wspace = repmat(',',max_length,1);
out_str = [];
for iter = 1:numel(con)
    out_str = [out_str char(con_reg(:,iter)) char(wspace)];
end
out_cell = cellstr(out_str);
% extension will be csv
ext = '.csv';

filename = strcat((genotype{1}),'-',num2str(threshold),'bpThresh',ext);

fid1 = fopen(filename,'wt');

for row = 1:numel(out_cell)
    fprintf(fid1,'%s\n',out_cell{row});
end
fclose(fid1);