1

我目前正在尝试加载许多包含相同变量的 MATLAB 文件,以便制作所有值的矩阵。

这些文件都以数字开头(即 40_analysed.mat),该数字之前是使用正则表达式从不同的原始数据文件中提取的,这意味着我有一个由所有单独的数字(id)组成的向量。

当我尝试使用下面的代码加载值并在单个矩阵中显示所有个人的数据时,文件不是按字母数字加载(即根据 id),而是随机加载。

file = dir('*_analysed.mat');
for i=1:length(id);
    load(file(i).name,'means');
    overallThresholds{i} = means;
end
overallMeans = cell2mat(overallThresholds)

我该怎么做才能使结果矩阵的顺序正确?抱歉,如果这个问题没有多大意义,这个问题有点难以表达!

4

2 回答 2

1

当一个人使用dir命令时,并不保证结果将按字母顺序排列。事实上,手册明确指出:

dir 列出 MATLAB 当前文件夹中的文件和文件夹。结果按操作系统返回的顺序显示。

即使您确实按字母顺序得到了它,也没有什么能保证您下次会得到它。因此,您必须dir使用sort命令对结果进行排序。

  [~,order] = sort( {file.name} );
  file = file(order);
于 2012-10-10T11:51:30.740 回答
1

如果您的文件名没有固定精度的数字(正如@FakeDIY 指出的那样,这意味着它们已经被排序),您可以执行以下操作:

file = dir('*_analysed.mat');
overalThresholds = cell(1, length(id));
IDs = zeros(1, length(id));
for i = 1:length(id)
    fileName = file(i).name;
    IDs(i)   = str2double( strrep( fileName, '_analysed.mat', '' ) );
    data     = load(fileName, 'means');
    overallThresholds{i} = data.means;
end
[~, reordering] = sort(IDs);
overallThresholds = overallThresholds(reordering);

换句话说,将文件 ID 存储在一个单独的数组中,然后使用SORT的第二个输出重新排列overallThresholds 以按照ID 的排序顺序。

(我还预先分配了数组,并使用了LOAD的函数形式,但您实际上并不需要这样做)。

于 2012-10-10T11:52:20.667 回答