2016-12-01 24 views
0

ブロック(ブロック1、ブロック2、ブロック3)の3つの1x56構造があります。私は問題ではないすべてのブロックを含む1つの大きな構造(実験)を作成する必要があります(exp = [ブロック1ブロック2ブロック3])。問題は、各ブロックの内容を他のブロックの内容と混合することなく、実験内のブロックをシャッフルする方法です。例えば構造内のシャッフリング構造

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).blockblock1(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