-1

matlab/オクターブのセル構造でデータを繰り返す

ごあいさつ

以下のような MATLAB セル構造があります。

original_array={
File1.wav
File2.wav
File3.wav
}

そして、セル構造のデータを繰り返したり、調整したり、複製したりしたいです。セル構造の各項目に for ループを使用してから、別のセル構造配列を作成することを考えていましたが、それはやり過ぎのようです。頭に浮かんだもう1つのアイデアは、

1)配列には、繰り返したいセルが含まれています 2)セル構造内のセルを繰り返したい回数。3) 配列から新しいセル構造を作成します。

新しい繰り返されるセル構造配列は *original_array* (構造配列) からデータを取得し、*rep_cells* 配列に基づいて新しいセル構造配列が作成されます。

例。 rep_cells =[1,3;2,1;3,4]%this は、original_array 内のどのセルを繰り返し、何回繰り返すかを選択するために使用されます

new_cells={
File1.wav
File1.wav
File1.wav
File2.wav
File3.wav
File3.wav
File3.wav
File3.wav
}

これを行うための最良の方法を考えてください。

ありがとう

4

2 に答える 2

2

repmatセル要素を複製するために使用できます。例えば:

a={'File1.wav', 'File2.wav','File3.wav'}

repmat(a,[2 2])

ans = 
    'File1.wav'    'File2.wav'    'File3.wav'    'File1.wav'    'File2.wav'    'File3.wav'
    'File1.wav'    'File2.wav'    'File3.wav'    'File1.wav'    'File2.wav'    'File3.wav'

これは、私が repmat encase で使用した matlab / octave テスト コードです。将来誰かがそれを必要とする場合

%test repmat
a={'File1.wav'; 'File2.wav';'File3.wav'}
b={};
repval_array=[1,3;2,1;3,4];
for ii=1:1:length(repval_array)
    b_tmp=repmat(a(repval_array(ii,1),1),[1 repval_array(ii,2)])
    b=[b,b_tmp]
end

答え

b = 
{
  [1,1] = File1.wav
  [1,2] = File1.wav
  [1,3] = File1.wav
  [1,4] = File2.wav
  [1,5] = File3.wav
  [1,6] = File3.wav
  [1,7] = File3.wav
  [1,8] = File3.wav
}
于 2013-07-24T22:01:48.013 に答える
0

少し不可解に見えますが、これを使用できます

original_array(cell2mat(arrayfun(@(x,y) x*ones(y,1), rep_cells(:,1), rep_cells(:,2), 'UniformOutput', false)))
于 2013-07-25T10:06:54.447 に答える