我正在尝试在我的工作区中导入GeoLife GPS trajectory dataset。包含此数据的文件夹为每个被跟踪用户提供182个子文件夹,每个子文件夹具有.plt格式的用户特定轨迹文件。轨迹文件的数量不固定,每个用户可能不同。此外,列不仅包含一种数据类型。前5列的类型是float,最后2列的类型是string(日期和时间)。我的目标是将此数据存储在大小为182的数组中,其中每个数组槽包含用户特定的轨迹。为此,我使用了给定here的getAllFiles函数。然后,我访问了从此函数返回的所有文件,并按如下方式存储它们:
fileList = getAllFiles('C:\...\MATLAB\HmMDTW\Data');
i = 1;
k = 1;
trj = [];
trjAll = cell(182,1);
pid = '000';
while i < length(fileList)
fileDir = cell2mat(fileList(i));
index = strfind(fileDir, 'Trajectory') + 11;
if any(index)
fid = fopen(fileDir);
t = textscan(fid, '%f %f %f %f %f %s %s', 'Delimiter', ',', 'HeaderLines', 6, 'CollectOutput', 1);
cid = fileDir(45:47);
if ~strcmp(cid, pid)
trjAll{k} = trj;
trj = [];
k = k + 1
end
pid = cid;
trj = [trj;t];
fclose(fid);
end
i = i + 1;
end
上面,我刚检查了所有文件,如果这个文件是一个轨迹,我读取该文件中的相关数据并将其添加到trj(当前用户的轨迹列表)。如果用户id(000,...,181)在下一个文件中发生变化,我在trjAll(所有用户轨迹数组)中添加了trj并初始化了trj。因此,trjAll包含所有trj-s。但是,花了很长时间(约4-5分钟)。有没有更有效的方法来实现我想做的事情?我认为我可能会在getAllFiles函数中读取文件,但我不认为这会节省大量时间。提前谢谢。