0

「1.xls」、「2.xls」...「15.xls」まで、それぞれ 141x44 セットのデータを持つ Excel データがたくさんあります。dir 関数を使用してデータを MATLAB にインポートしています。

ここでは、各ファイルの 1 番目と 2 番目の列を 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順序と呼ばれ、すべての種類のユーティリティの通常の並べ替え順序であり、MATLABはこのコマンドをOSに送信するだけなので、明らかにOSディレクトリリストプログラムも同様です。

数値による並べ替えが必要な場合は、ファイル名の文字列を数値に変換して並べ替えることができます。私がそれを自分で書く前に、いくつかの軽いグーグルがこれを生み出しました。これはあなたがあなたの問題に簡単に適応することができます:

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 に答える