我正在尝试运行一个计数器平衡程序。我无法理解Python正在做什么来获得我收到的输出。我有16张地图的8种变体。变量由timingConditions
*distractionConditions
定义。初始变量定义有4个关键部分:
inst
是一个包含所有8个变体的列表*16个实验图按变体排序(这些地图就像电子游戏地图一样)。这就留下了len(inst) = 128
- CCD_ 5在CCD_ 6中被细分为8个子列表。每一个子列表表示特定变体的映射1-16。每个索引在一个子列表中表示一个映射/变体组合。调用
conds
中每个子列表的索引将清楚地显示这一点 -
这16个映射被分解为8个列表,每个列表包含两个映射,在变量
MapGroups
中定义。这8个列表用于下面的矩阵。 -
counterBalanceMatrix
表示映射到条件分配的八个唯一平衡次序。range(1,9)
中的每个主题都被分配到这些行中的一行。行中的数字表示贴图组。列(即索引排序)表示变量到映射组的分配。例如,counterBalanceMatrix[0][0]
返回1
,第一个索引对应于第一个变量列SSTrue
的赋值;第二个索引对应于MapGroups[0]
(将返回"0"、"15")。因此,期望的输出将是映射0和15(或没有基于零的排序的1和16)被分配为SS True。你可以想象如下:####+--------+--------+--------+--------+---------+---------+---------+---------+ ####| SSTrue | SLTrue | LSTrue | LLTrue | SSFalse | SLFalse | LSFalse | LLFalse | ####+--------+--------+--------+--------+---------+---------+---------+---------+ ####| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ####| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | ####| 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | ####| 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | ####| 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | ####| 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | ####| 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | ####| 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ####+--------+--------+--------+--------+---------+---------+---------+----- ----+
代码的预期输出低于subject in range(1,9):
,每个MapGroup
将有一个实例,每个变体有两个观测值(例如SS-TRUE、LL False等)。在所有受试者中,对所有MapGroups
和变体的观察结果相同这部分代码按预期工作。
import re
timingConditions = ["SS","SL","LS","LL"]
distractionConditions = ["True","False"]
maps = [i for i in range(1,17)]
#This loop sets up the 128 (16*8) variants. Inst for instances of scenario.
inst = []
for d in distractionConditions:
for t in timingConditions:
for map in maps:
inst.append(str(str(map)+"-"+t+"-"+d))
conds = [inst[0:16],inst[16:32],inst[32:48],inst[48:64],inst[64:80],inst[80:96],inst[96:112],inst[112:128]]
MapGroups= [[0,8],
[1,9],
[2,10],
[3,11],
[4,12],
[5,13],
[6,14],
[7,15]]
counterBalanceMatrix= [[1,2,3,4,5,6,7,8],
[2,3,4,5,6,7,8,1],
[3,4,5,6,7,8,1,2],
[4,5,6,7,8,1,2,3],
[5,6,7,8,1,2,3,4],
[6,7,8,1,2,3,4,5],
[7,8,1,2,3,4,5,6],
[8,1,2,3,4,5,6,7]]
for subject in range(1,9):
cRow = counterBalanceMatrix[(subject-1)%8]#Use the modulus operator to find out which row to use in counterbalancing for this subject.
scenArray = []
for group in range(0,8):#This loops across map groups and look up their assigned interruption condition
scenArray.extend([conds[cRow[group]-1][i] for i in MapGroups[group]])
print "****","Participant",subject,"Correct Day 1****"
print scenArray
print "nn"
这就是问题所在:我想重复这个过程,但已镜像。也就是说,无论每个list in MapGroups
最初被分配的变体是什么,我都希望它被反转(例如,如果你收到的MapGroups[0]
是True,那么我希望它们是False。MapGroups[0]
被分配了SS,现在它必须是LL。
我最初的解决方案是反转counterBalanceMatrix
并应用相同的循环。然而,这并没有奏效:
counterBalanceMatrixReverse= []
for list in counterBalanceMatrix:
counterBalanceMatrixReverse.append(list[::-1])
###And then run the exact same loop over.
for subject in range(1,9):
cRow = counterBalanceMatrixReverse[(subject-1)%8]
#
scenArray = []
for group in range(0,8):
scenArray.extend([conds[cRow[group]-1][i] for i in MapGroups[group]])
print "****","Participant",subject,"Broken Reversed 2****"
print scenArray
print "nn"
输出不正确,例如:
>Participant 4
>'2-SL-True', '10-SL-True'
Participant 4 Reversed
>'2-SS-False', '10-SS-False'
Exptected Reversed Ouput:
>'2-LS-False', '10-LS-False'
然而,简单地反转第二阵列确实解决了我的问题
condsreverse = []
condsreverse.extend(conds[::-1])
for subject in range(1,9):
cRow = counterBalanceMatrix[(subject-1)%8]#Note I use same matrix
scenArray = []
for group in range(0,8):
scenArray.extend([condsreverse[cRow[group]-1][i] for i in MapGroups[group]])
print "****","Subject",subject,"Correct Reverse****"
print scenArray
print "nn"
我已经坐了三天了,我不明白为什么最初的反向解决方案没有产生所需的输出。
如果只是为了结束问题,我相信解决方案如下。
我的错误是,我认为[conds[cRow[group]-1]
是根据cRow[i]
的索引分配变体的,而cRow[i]
只是用来调用特定的映射。然而,实际执行的是根据cRow[i]
的值分配变量。因此,没有根据索引将"列"分配给MapGroups
。这意味着简单地反转counterBalanceMatrix
基本上只是创建counterBalanceMatrix
的另一个版本。
我能让条件相互镜像的唯一方法是颠倒conds
的顺序,因为这是分配中实际使用的列表;当然,除非我想将scenArray.extend([condsreverse[cRow[group]-1][i] for i in MapGroups[group]])
更改为调用每个项的索引(对于原始项和反向项),然后基于该索引调用映射组,如下所示:
for index in range(0,8):
scenArray.extend([conds[index][i] for i in MapGroups[cRow[index]-1]])
附言:我想把它写成一个问题有助于我认识到自己的错。很抱歉