在结构内改组结构

时间:2016-12-01 16:54:04

标签: matlab psychtoolbox

我有三个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很新。 我真的很感激你的想法和帮助!

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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