在matlab / octave中重复单元结构中的数据

时间:2013-07-24 20:10:48

标签: arrays matlab for-loop octave

在matlab / octave中重复单元结构中的数据

问候全部

我有一个如下所示的MATLAB单元结构:

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

我想重复或调整或复制单元格结构中的数据。我正在考虑为单元格结构中的每个项目使用for循环,然后创建另一个单元格结构数组,但这似乎有点矫枉过正。想到的另一个想法是

1)数组包含我想重复的单元格 2)以及我希望重复单元结构中的单元格的次数。 3)并从数组中创建一个新的单元结构。

新的重复单元结构数组将从* original_array *(结构数组)获取数据,并将根据* rep_cells *数组

创建新的单元结构数组

实施例。 rep_cells =[1,3;2,1;3,4]%这将用于选择要重复的orginal_array中的哪些单元格以及重复它们的次数

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

任何想法都是最好的方法。

由于

2 个答案:

答案 0 :(得分: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'

这是我用的replab包装的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
}

答案 1 :(得分:0)

看起来有点神秘,但你可以使用这个

original_array(cell2mat(arrayfun(@(x,y) x*ones(y,1), rep_cells(:,1), rep_cells(:,2), 'UniformOutput', false)))