【发布时间】:2015-09-15 14:09:43
【问题描述】:
我正在编写一个 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 函数不起作用。理想情况下,使用 textscan 的更快方法是完美的。
【问题讨论】:
-
列数是固定的吗?
-
如果每一行的列数(当然还有每列的类型)都相同,您可以使用任何内置文件阅读器功能的 matlabs。例如importdata、xlsread 或任何工作函数。您也可以使用第一行作为模板并设计一个
fscanf。此外,可以使用textscan 方法,在其中指定分隔符。不知道数据格式很难给出建议 -
@CarlWitthoft 我认为
ImportData是一个变量。提供的代码似乎是 c 代码。建议宁愿使用 Matlab 的扩展库。 -
@patrik 'ImportData' 在这里是一个变量。整个文件中的数据类型不一致 - 有些列是字符串,有些是数字。这就是为什么据我所知“importdata”功能不起作用的原因。 'textscan' 是我一直在使用的,但我的问题是它对大文件效率低下。
标签: performance matlab import io vectorization