Массив структур неправильной сортировки MATLAB при использовании команды dir

У меня есть куча данных 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, ..."). Кто-нибудь знает, как я могу это исправить? Спасибо.


person Community    schedule 15.12.2012    source источник


Ответы (1)


Порядок, который вы видите, называется ASCII-бетическим порядком и является обычным порядком сортировки для всех виды утилит, и, очевидно, также программа для вывода списка каталогов вашей ОС, поскольку Matlab просто передает эту команду в ОС.

Если вам нужна числовая сортировка, вы можете преобразовать строки имени файла в числа и отсортировать их. Прежде чем я написал это сам, несложный поиск в Google дал это, которое вы можете легко адаптировать к своей проблеме:

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);
person engineerC    schedule 15.12.2012