Matlab - 提高文件阅读方法的效率

时间:2015-06-29 07:34:25

标签: performance matlab import io vectorization

我正在编写一个Matlab脚本,该脚本首先将空格分隔的.log文件读入单元格数组。文件中的列标题都是字符串,但整个文件中的数据类型是混合的,所以为了简单起见,我现在将每个值都视为字符串。

这是我到目前为止所做的,它适用于小文件。

fileID = fopen('file');
ImportData = char.empty; % create empty array to add on to

while ~feof(fileID)
    tLines = fgetl(fileID); % reads line into string
    raw = strsplit(tLines, ' '); %splits line into array for that line
    ImportData = cat(1, ImportData, raw); %adds line to rest of array
end

fclose(fileID);

然而,这个脚本需要阅读的实际文件非常笨重(30,000多行,200多列),我发现这个过程非常慢。我做过一些研究,我确信矢量化就是答案,但我对这个领域非常陌生。

有什么方法可以改变这个程序来大幅提高速度?

编辑:列类型不一致,因此importdata函数不起作用。该文件具有.log扩展名,因此readtable函数不起作用。理想情况下,使用文本扫描的更快方法是完美的。

1 个答案:

答案 0 :(得分:0)

readtable(filename,'FileType','text','Delimiter',' ')

应该可以正常工作。只要您的文件以''分隔,文件扩展名“.log”就无关紧要了。 如果您事先了解列格式,则可以进一步指定格式字符串/序列。指定格式字符串可以使操作更快。如果您没有指定格式,那么如果整列是数字,它将返回数字,如果它是混合的,则返回单元格。