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 很陌生。我非常感谢您的想法和帮助!

4

2 回答 2

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 
于 2016-12-01T17:07:12.333 回答
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
于 2016-12-01T17:11:33.077 回答