-1

在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]%this 将用于选择 orginal_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 一起使用的 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 回答