gpt4 book ai didi

python - 两种反转列表的方法之间的输出不一致

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:59 25 4
gpt4 key购买 nike

我正在尝试运行一个平衡程序。我无法理解 Python 正在做什么来获取我收到的输出。我有 16 张 map 的 8 个变体。变体由 timingConditions * distractionConditions 定义。初始变量定义有4个关键部分:

  1. inst 是包含所有 8 个变体 * 16 个实验图的列表按变体排序( map 实际上就像电子游戏 map )。剩下 len(inst) = 128
  2. instconds中被分割为8个子列表。这些中的每一个子列表代表特定变体的映射 1-16。各指标在子列表中代表一个映射/变体组合。调用 conds 中每个子列表的索引将清楚地显示这一点。
  3. 这 16 个 map 分为 8 个列表,每个列表包含两个 map ,在变量 MapGroups 中定义。这 8 个列表用于下面的矩阵中。

  4. counterBalanceMatrix 表示条件分配映射的八种唯一平衡排序。 range(1,9) 中的每个主题都分配到这些行之一。行中的数字代表 map 组。列(即索引排序)表示变体到映射组的分配。例如,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"

这就是问题所在:我想重复这个过程,但镜像。也就是说,无论 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"

我已经在这上面坐了三天了,我不明白为什么最初的逆向解决方案没有产生所需的输出。

最佳答案

我相信解决方案如下,只是为了结束问题。

我的错误是我假设 [conds[cRow[group]-1] 正在根据 cRow[i] 的索引和cRow[i] 只是用来调用特定的 map 。然而,实际做的是根据cRow[i]的值分配变体。因此,“列”没有根据索引分配给 MapGroups。这意味着简单地反转 counterBalanceMatrix 基本上只是创建 counterBalanceMatrix 的另一个版本。

我能让条件相互镜像的唯一方法是颠倒conds的顺序,因为这是分配中实际使用的列表;当然,除非我想更改 scenArray.extend([condsreverse[cRow[group]-1][i] for i in MapGroups[group]]) 来调用每个项目的索引(对于原始和反转),然后根据该索引调用 map 组,如下所示:

for index in range(0,8):
scenArray.extend([conds[index][i] for i in MapGroups[cRow[index]-1]])

PS:我想把它写成一个问题可以帮助我认识到自己的错误。对此表示抱歉。

关于python - 两种反转列表的方法之间的输出不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36618512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com