在MATLAB中将数据加载到向量而不是单元格

时间:2015-08-31 01:02:33

标签: matlab vector

我使用以下代码将数据从文本文件加载到我的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)

但我不知道那会更好。这是一个“更好”的解决方案/方法吗?

1 个答案:

答案 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);