【问题标题】:Shuffling structures within a structure改组结构内的结构
【发布时间】:2016-12-02 01:11:33
【问题描述】:

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

【问题讨论】:

    标签: matlab psychtoolbox


    【解决方案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 
    

    【讨论】:

      【解决方案2】:

      您当前使用的结构相当混乱。在我看来,您希望 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        相关资源
        最近更新 更多