MATLAB:快速将字符串和数字数据列写入CSV文件

时间:2014-08-20 12:58:44

标签: matlab csv printf

我有多列数据〜200,000个元素长:

date = {'date1','date2',...'dateN'};%Strings
column2 = [4,7,...,valueN];%Integers
column3 = [2.4,3.1,...,valueN];%Doubles

我需要以

格式快速将它们写入CSV文件
DateHeader,Column2Header,Column3Header
date1,4,2.4
date2,7,3.1
.,.,.
.,.,.
.,.,.
dateN,valueN,ValueN

我一直在使用:

fid = fopen(filename,'w+');
fprintf(fid,'%s,%s,%s\n',{'DateHeader','Column2Header','Column3Header'});
for a=1:length(date)
    fprintf(fid,'%s,',date{a});
    fprintf(fid,'%g,'column2(a));
    fprintf(fid,'%g\n'column3(a));
end

但这非常缓慢。编写一个文件需要花费不到一分钟的时间,只需不到一秒钟就可以使用textscan读回来。我知道csvwrite但是这不接受单元格数组输入(它必须是一个包含日期列的单元格数组)

2 个答案:

答案 0 :(得分:1)

我建议您进行以下更改,看看这是否足以让您获得性能提升。我已将文件权限更改为W而非w+。我认为打开文件只写,没有刷新似乎更快。我还将它更改为每个循环的单个fprintf调用。

fid = fopen(filename,'W');
fprintf(fid,'%s,%s,%s\n','DateHeader','Column2Header','Column3Header');
for a=1:length(date)
    fprintf(fid,'%s,%g,%g\n',date{a},column2(a),column3(a));
end
fclose(fid);

答案 1 :(得分:1)

使用writetable,解决方案变为

date = {'date1','date2','dateN'};
column2 = [4,7,9];
column3 = [2.4,3.1,6.5];
headers = {'DateHeader','Column2Header','Column3Header'};

T = table(date', column2', column3', 'VariableNames', headers);
writetable(T, 'Table.csv');