【问题标题】:MATLAB: Quickly write columns of strings and numerical data to a CSV fileMATLAB:快速将字符串列和数值数据写入 CSV 文件
【发布时间】:2014-08-20 22:45:07
【问题描述】:

我有多列数据,大约 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,但这不接受元胞数组输入(它必须是一个元胞数组才能包含日期列)

【问题讨论】:

  • 你试过csvwrite函数吗?
  • ...或 dlmwrite。您也可以考虑使用 xlswrite 写入 Excel,然后转换为 csv。
  • @gire 这适用于细胞矩阵吗?文档只提到了数字矩阵。
  • @Dan csvwrite 仅适用于数字数据。
  • 写入 Excel,当然。如果你想写一个单元格检查这个贡献在 Matlab 中心:cell2csv

标签: matlab csv printf


【解决方案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);

【讨论】:

    【解决方案2】:

    有了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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2016-06-15
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2015-07-16
      相关资源
      最近更新 更多