2

50 個のファイルのセットを matlab ワークスペースに読み込みました。(からdata1までdata50)。それぞれのサイズは です721*176。各データの最初の 144 行だけを抽出し、別のデータに格納したいと考えています。

例えば:

newData1 = data1(1:144,:);

私の質問は、ループを使用してすべてのデータを一度に処理するにはどうすればよいですか?

4

1 に答える 1

1

それはあなたがデータをどのように保存するかに依存します。

あなたの場合の最良の方法は3D配列です:

まず、配列を割り当てます(@HighPerformanceMarkが正しく指摘しているように):

data = zeroes(721,176,50);

次に、値を入力します。

data(:,:,1)  =  read('firstFile.bmp');
data(:,:,2)  =  read('secondFile.bmp');
...

data(:,:,50) = ...

その場合は、次の選択を使用してください。

data(1:144,:,:)

データを格納するもう1つのもっともらしい方法は、セル配列です。3D配列は異なるサイズの行列を処理できないため、これは便利です。

 data{1} = read('firstFile.bmp');
 data{2} = read('secondFile.bmp');
 ...

この場合、以下を使用しますcellfun

 selection = cellfun(@(x) {x(1:144,:)}, data);

それでもデータを配列ではなく個別の変数に格納することを主張する場合は、を使用できますeval。これは最も推奨されない方法です。

 for i=1:50
    eval(' selection{i} = data%d',i)
 end
于 2012-10-01T15:45:32.737 に答える