2013-07-24 50 views
0

在细胞结构的重复数据在Matlab /倍频程重复数据

问候所有

我有一个MATLAB单元结构这样下面:

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

我想重复或调整或复制单元结构中的数据。我正在考虑为单元格结构中的每个项目使用for循环,然后创建另一个单元格结构数组,但这看起来像是过度杀伤。想到的另一个想法是有一个数组包含我想重复什么样的单元格,以及我希望单元格结构中单元格重复的次数。 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 
} 

任何想法要做到这一点的最好办法。

感谢

回答

1

可以使用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用来包住有人需要它在未来

%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 
} 
+0

首先:好的,我没有了解这个功能。第二:我只是在文档中查找它 - >您不仅可以将它用于单元数组,也可以用于其他类型的数组 - 例如数值矩阵 - 也可以复制。 [doc:repmat](http://www.mathworks.de/de/help/matlab/ref/repmat.html) –

+0

我没有说repmat只能用来复制单元格元素。只是从它的名字它REPRATES MATRICE ...看到例如我对这个问题的答案... http://stackoverflow.com/questions/14532457/a-matrix-operation-in-matlab/14532565#14532565 – bla

0

看起来有点神秘,但你可以在MATLAB /八度测试代码使用此

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