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