0

我有一堆 Excel 数据,分别称为“1.xls”、“2.xls”……直到“15.xls”,每个都有 141x44 组数据。我正在使用 dir 函数将数据导入 MATLAB。

在这里,我将每个文件的第一列和第二列导入 A 和 B 矩阵。

  prob15 = dir(fullfile('C:\Users\Bo Sun\Documents\MATLAB\prob15'),'.xls');
  global A B
  A=zeros(141,length(prob15));
  B=zeros(141,length(prob15));
  for i=1:length(prob15)
      A(:,i) = xlsread(prob15(i).name,'A:A');
      B(:,i) = xlsread(prob15(i).name,'B:B');
  end

我的问题是,当我使用 dir 命令时,由于某种原因,MATLAB 对数据进行了错误排序,因为 prob15 结构体数组的升序将是“1.xls”、“10.xls”、“11.xls”.. . 而不是正常的升序数字顺序(“1.xls”,“2.xls,...)。有人知道我该如何解决这个问题吗?谢谢。

4

1 回答 1

3

您看到的顺序称为ascii-betical 顺序,是各种实用程序的正常排序顺序,显然您的操作系统目录列表程序也是如此,因为 matlab 只是将此命令发送给操作系统。

如果您想要数字排序,您可以将文件名字符串转换为数字并对它们进行排序。在我自己写之前,一些简单的谷歌搜索产生了这个,你可以很容易地适应你的问题:

list = dir(fullfile(cd, '*.mat'));
name = {list.name};
str  = sprintf('%s#', name{:});
num  = sscanf(str, 'r_%d.mat#');
[dummy, index] = sort(num);
name = name(index);
于 2012-12-15T07:01:47.353 回答