我使用以下代码将数据从文本文件加载到我的MATlab函数中:
data = cell(h.numDirs, numDataFilesInFirstDir);
for d = 1:h.numDirs
% Code to set fileNames, iDir
for t = 1:size(fileNames,1)
fId = fopen([iDir, '/', fileNames{t}]);
% Drop the first two lines (column headers)
for skip = 1:2
fgets(fId);
end
U_temp = fscanf(fId, '%f %f', [2, Inf]);
U_temp = U_temp'; % ' transpose (syntax highlighting on SO)
data(d, t) = {U_temp(:,2)};
fclose(fId);
end
end
每个文件应该具有相同的长度(至少对于不同的t
,通常用于变化的d
,否则我以后会遇到问题)
我应该(/我怎样才能)在这里简化代码以避免(不必要的?)单元格?
我可以扫描第一个数据集,然后使用类似
的内容 data = zeros(h.numDirs, numDataFilesInFirstDir, lengthOfFirstFile)
但我不知道那会更好。这是一个“更好”的解决方案/方法吗?
答案 0 :(得分:1)
我会使用dlmread
代替fscanf
。数据类型很难,因为您的尺寸会有所不同我不会填充数组......不使用单元格的任何好处都会被额外的复杂性和内存命中所克服。细胞阵列是一个合理的选择。实际上,在这种情况下,我不会太担心预分配。下面是一个类似的选项,使用structs
和动态字段名称嵌入源目录和文件名,供以后参考。
data = struct();
for d = 1: ...
for t = 1: ...
file = fullfile(iDir, fileNames{t});
range = [3, 1, inf, 2];
dlm = ' ';
Utemp = dlmread(file, dlm, range);
data.(iDir).(fileNames{t}) = Utemp(:, 2);