2017-08-17 43 views
6

我有细胞的细胞嵌套像下面的一个:选择:Matlab的

CellArray={1,1,1,{1,1,1,{1,1,{1,{1 1 1 1 1 1 1 1}, 1,1},1,1},1,1,1},1,1,1,{1,1,1,1}};

我需要随机选择在CellArray的位置。 CellArray的所有成员的位置在随机选择过程中必须具有相同的机会。谢谢。

+0

你可能会发现这个问题和[**之前的一个** **]之间的轻微连接(https://stackoverflow.com/questions/45665684/finding-number-of-all-nested-cells-in-a -complex-cell) – Amin

+1

什么是随机位置的一些例子? – rayryeng

+1

你的意思是每个'1'应该有相同的选择机会,按照所示的样本数组? – crazyGamer

回答

9

您可以捕获celldisp函数的输出。然后使用正则表达式来extrcat指数:

s=evalc('celldisp(CellArray,'''')'); 
m = regexp(s, '\{[^\=]*\}', 'match'); 
  • 由于@excaza,暗示更清晰的正则表达式使用的

结果:

m = 
{ 
    [1,1] = {1} 
    [1,2] = {2} 
    [1,3] = {3} 
    [1,4] = {4}{1} 
    [1,5] = {4}{2} 
    [1,6] = {4}{3} 
    [1,7] = {4}{4}{1} 
    [1,8] = {4}{4}{2} 
    [1,9] = {4}{4}{3}{1} 
    [1,10] = {4}{4}{3}{2}{1} 
    [1,11] = {4}{4}{3}{2}{2} 
    [1,12] = {4}{4}{3}{2}{3} 
    [1,13] = {4}{4}{3}{2}{4} 
    [1,14] = {4}{4}{3}{2}{5} 
    [1,15] = {4}{4}{3}{2}{6} 
    [1,16] = {4}{4}{3}{2}{7} 
    [1,17] = {4}{4}{3}{2}{8} 
    [1,18] = {4}{4}{3}{3} 
    [1,19] = {4}{4}{3}{4} 
    [1,20] = {4}{4}{4} 
    [1,21] = {4}{4}{5} 
    [1,22] = {4}{5} 
    [1,23] = {4}{6} 
    [1,24] = {4}{7} 
    [1,25] = {5} 
    [1,26] = {6} 
    [1,27] = {7} 
    [1,28] = {8}{1} 
    [1,29] = {8}{2} 
    [1,30] = {8}{3} 
    [1,31] = {8}{4} 
} 

使用randi选择索引:

m{randi(numel(m))} 
+4

您可以从'regexp'得到与'm = regexp(s,'\ {[^ \ =] * \}','match');',我认为这是对用户退出正则表达式的更清晰的表示。仍然,非常聪明,+1 – excaza

+0

@ rahnema1,@excaza_谢谢你分享你宝贵的知识._ – Amin

+1

@Amin很高兴,如果它可以帮助! – rahnema1