2017-08-17 94 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