在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
}
任何想法都是最好的方法。
由于
答案 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)))