在PsychoPy中具有交替顺序的随机条件

时间:2015-11-26 15:07:50

标签: psychopy

我有一个简单的实验,有8个不同的试验,我希望只出现一次而不重复;参与者被要求解决'数字序列,其中4个序列具有溶液(S),4个不可溶解(U)。

因此,我有8个试验:

S1,S2,S3,S4,U1,U2,U3,U4。

我想提出试验,以便他们交替:

S1,U1,S2,U2,S3,U3,S4,U4

但是,我希望随机化S和U的顺序,同时保持交替模式。

例如,S3,U2,S2,U4,S4,U1,S1,U3

我正在使用构建器并且是Python的新手(尽管我熟悉Matlab中的编码)。我能想出的唯一解决方案是尝试在excel文件中对试验的顺序进行洗牌,然后将它们组合起来以便它们交替使用 - 但这看起来并不优雅。

是否有一种在构建器中实现此功能的简单方法或添加代码组件?

我已经包含了定义试验的输入文件/ excel表。专栏难度'表明它们是可解决的还是无法解决的试验。

欢呼声, 哈利

input

2 个答案:

答案 0 :(得分:0)

使用先前的答案on list conversionslist comprehensions的概念

import random as r 
a = ["s1","s2","s3","s4"]
b = ["u1","u2","u3","u4"]
r.shuffle(a)
r.shuffle(b)
trialList = [tr for pr in zip(a,b) for tr in pr]

答案 1 :(得分:0)

您应该zip(或itertools.izip),然后使用itertools.chain.from_iterable展平结果。使用zip获取多个序列并创建一个新序列,其中每个项目包含原始序列中的相应元素。在您的情况下,它将创建类似[(S3, U2), (S2, U4), (S4, U1), (S1, U3)]的内容。然后,您可以使用chain函数展平,以获得所需的[S3, U2, S2, U4, S4, U1, S1, U3]序列。 shuffle将两个序列就地的顺序随机化,而listchain生成的迭代器转换为列表:

from itertools import chain, izip
from random import shuffle

solvable = [s1, s2, s3, s4]
unsolvable = [u1, u2, u3, u4]

shuffle(solvable)
shuffle(unsolvable)

trials = list(chain.from_iterable(izip(solvable, unsolvable)))