2016-12-01 28 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