Я пытаюсь запустить программу балансировки счетчика. Я не могу понять, что делает Python, чтобы получить вывод, который я получаю. У меня есть 8 вариантов из 16 карт. Варианты определяются 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, Л.Л. -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]
, как истинные, то я хочу, чтобы они были Ложными. MapGroups[0]
был назначен СС, теперь он должен быть 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'
Тем не менее, простым поворотом конд массива действительно решает мою проблему
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"
Я сидел на этом уже три дня, и я не могу понять, почему начальное реверсирования решение не дает желаемых результатов.
Хм, но почему реверсирование строк также не отменяет присвоение индекса в '[condsreverse [cRow [group] -1] [i] для i в MapGroups [group]]' –
Hrm, я должен сказать, что я тщательно разобравшись между различными матрицами, которые у вас есть в вашем коде, и тем, что происходит в обратном порядке. –
Извините за путаницу. У меня есть два случая разворота, которые можно рассматривать как отдельные. Как вы говорите, в одном я меняю столбцы, а в другом я меняю строки. Второй снипп меняет строки в матрице, меняя списки. 3-й снипп я отбрасываю столбцы. Однако, если вы рисуете реверсирование строк, это должно иметь тот же эффект, что и разворот столбца. Тем не менее, я получаю два разных выхода, в зависимости от того, что я делаю. Понятно, что моя процедура смены строки - это недостаток, но я отлаживал ее и не могу понять, почему. –