2016-12-01 61 views
0

我有三個1x56結構 - 塊(塊1,塊2,塊3)。我需要創建一個包含所有塊的大結構(實驗),這不是問題(exp = [block1 block2 block3])。問題在於如何在實驗中對塊進行混洗,而不將每個塊的內容與其他塊的內容混合。在一個結構中重新排列結構

例如:

block1(1).block = '1'  
block1(2).block = '1'  
block1(3).block = '1'  

block2(1).block = '2'  
block2(2).block = '2'  
block2(3).block = '2'  

block3(1).block = '3' 
block3(2).block = '3' 
block3(3).block = '3' 

我想111333222或333222111或222333111等,但從未132123112等

對不起它不是很清楚,我很新的MATLAB的。 我真的很感激你的想法和幫助!

回答

1

如果我理解正確的話,你可以這樣來做:

blocks = {block1 block2 block3}; % Collect all blocks in cell array 
ind = randperm(numel(blocks)); % Index of random permutation 
shuffled_blocks = [blocks{ind}]; % Apply permutation and merge into one struct array 
0

您使用目前的結構是相當混亂。它看起來像你想block1(1).block代表block1第一次審判(假設你因爲PsychToolbox標籤在塊內試用)。我提出了一個包含所有塊的數組的單一結構。同樣,每個塊都包含該塊內所有試驗的數組。每個試驗都包含與該區塊相關的信息。

blocks(1).trials{1} = '1'; 
blocks(1).trials{2} = '1'; 
blocks(1).trials{3} = '1'; 

blocks(2).trials{1} = '2'; 
blocks(2).trials{2} = '2'; 
blocks(2).trials{3} = '2'; 

blocks(3).trials{1} = '3'; 
blocks(3).trials{2} = '3'; 
blocks(3).trials{3} = '3'; 

for blk_ind = randperm(numel(blocks)) 
    trials = block(blk_ind); 
    % when blk_ind == 1, trials is {'1','1','1'} 
end