0

ブロック (block1、block 2、block3) の 3 つの 1x56 構造があります。すべてのブロックを含む 1 つの大きな構造 (実験) を作成する必要がありますが、これは問題ではありません (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 に答える