Performance Matlab&提高文件读取效率的方法
我正在编写一个Matlab脚本,首先将一个以空格分隔的.log文件读入一个单元格数组。文件中的列标题都是字符串,但整个文件中的数据类型是混合的,因此为了简单起见,我现在一直将每个值都作为字符串处理 这就是我到目前为止所做的,它可以很好地处理小文件Performance Matlab&提高文件读取效率的方法,performance,matlab,import,io,vectorization,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(fil
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);
然而,这个脚本需要读取的实际文件非常笨拙(30000多行,200多列),我发现这个过程非常慢。我做了一些研究,我相信矢量化是答案,但我对这个领域非常陌生
我可以通过哪些方式改变此过程以显著提高速度
编辑:列类型不一致,因此importdata
函数不起作用。该文件的扩展名为.log,因此readtable
函数不起作用。理想情况下,使用textscan的更快方法将是完美的
readtable(filename,'FileType','text','Delimiter',' ')
应该行得通。只要文件以“”分隔,文件扩展名“.log”就不相关。
如果您事先了解列格式,则可以进一步指定格式字符串/序列。指定格式字符串可以使操作更快。如果未指定格式,则如果整列为数字,则返回数字;如果混合,则返回单元格字符串。列数是否固定?如果每行的列数(当然是每列的类型)相同,则可以使用matlabs内置的任何文件读取器功能。例如,或任何工作函数。您还可以使用第一行作为模板,设计一个
fscanf
。此外,还可以使用指定分隔符的方法。不知道数据就很难给出建议format@CarlWitthoft我认为,ImportData
是一个变量。提供的代码似乎是c代码。建议使用Matlab的大量库。@patrik“ImportData”是这里的一个变量。整个文件中的数据类型不一致-有些列是字符串,有些是数字。这就是为什么据我所知,“importdata”功能无法工作的原因“文本扫描”是我一直在使用的,但我的问题是它对大文件的效率低下。可能重复谢谢!这正是我想要的。很高兴我能帮上忙。请你投票赞成我的回答好吗?