我正在尝试运行一个反平衡程序。我无法理解 Python 正在做什么来获得我收到的输出。我有 16 张地图的 8 种变体。变体由timingConditions
*定义distractionConditions
。初始变量定义有 4 个关键部分:
inst
是一个包含所有 8 个变体 * 16 个按变体排序的实验地图的列表(这些地图实际上就像一个视频游戏地图)。这就离开了len(inst) = 128
。inst
中细分为 8 个子列表conds
。这些子列表中的每一个都代表特定变体的映射 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 "\n\n"
这就是问题所在:
我想重复这个过程,但是被镜像了。也就是说,无论每个变量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 "\n\n"
输出不正确,例如:
>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'
但是,简单地反转 cond 数组确实解决了我的问题
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 "\n\n"
我已经坐了三天了,我无法弄清楚为什么最初的反转解决方案没有产生所需的输出。