Python 精神病患者的Triahandler与时间测量

Python 精神病患者的Triahandler与时间测量,python,loops,time,trial,psychopy,Python,Loops,Time,Trial,Psychopy,对于go-NoGo任务,我想使用psychopy的data.TrialHandler类组织图片: trials = data.TrialHandler(ImageList, nReps=1, method='random') 现在我想编写一个循环,在这个循环中,精神病患者进入字典,呈现第一组图片(例如a_n),然后进入第二组,直到第六组。我尝试了以下方法: import glob, os, random, sys, time import numpy.random as rnd from ps

对于go-NoGo任务,我想使用psychopy的data.TrialHandler类组织图片:

trials = data.TrialHandler(ImageList, nReps=1, method='random')
现在我想编写一个循环,在这个循环中,精神病患者进入字典,呈现第一组图片(例如a_n),然后进入第二组,直到第六组。我尝试了以下方法:

import glob, os, random, sys, time
import numpy.random as rnd
from psychopy import visual, core, event, monitors, gui, logging, data
im_a = glob.glob('./a*')   # upload pictures of the a-type, gives out a List of .jpg-files
im_n = glob.glob('./n*')   # n-type
im_e = glob.glob('./e*')   # e-type

# combining Lists of Pictures
A_n = im_a + im_n
N_a = im_n + im_a
A_e = im_a + im_e
E_a = im_e + im_a
E_n = im_e + im_n
N_e = im_n + im_e

# making a Dictionary of Pictures and Conditions
PicList = [A_n, N_a, A_e, E_a, E_n, N_e]   # just the six Combinations
CondList = [im_a,im_n,im_a,im_e,im_e,im_n] # images that are in the GO-Condition
ImageList = []
for imagelist, condition in zip(PicList, CondList):
    ImageList.append({'imagelist':imagelist,'condition':condition}) # to associate the picturelist with the GO Conditionlist
对于标题,我要问一个额外的问题:

我知道这四个问题对于一个问题来说是很多的,但也许有人能给我一些好主意,我如何解决这些问题。。。谢谢大家

(A)这与您的问题无关,但会提高性能。 该行:

bitmap = visual.ImageStim(win)
不应该在循环中发生。i、 例如,您应该只初始化每个刺激一次,然后在一个循环中只更新该刺激的属性,例如,使用bitmap.setImage(…)。因此,将此初始化行移到顶部,在那里创建文本刺激

(B) [删除:我没有注意到第一个代码块。]

(C)

这一行不接受任何参数。它应该是bitmap.draw()。不管怎样,“图片”指的是什么还不清楚。记住Python是区分大小写的。这与上面循环中定义的“图片”不同。我猜您想更新正在显示的图片?在这种情况下,您需要在这个循环中执行bitmap.setImage(…)行,而不是在上面,在这里您将始终绘制一个固定的图片,因为这是每次尝试中唯一设置的图片

(D) 对于RTs,每次尝试只保存一次(检查缩进)。如果要为每个图像保存一行,则需要再次缩进这些行。此外,在数据输出中,每次试验只能得到一行。如果您想在每次试验中记录多个RTs,则需要为它们指定唯一的名称,例如rt_1、rt_2、…、rt_6,以便它们分别显示在单独的列中。e、 g.您可以为此循环使用枚举器:

for i, picture in enumerate(Piclist)
    # lots of code
    # then save data:
     trials.addData('rt_'+str(i), rt)

出现标记为[1]的问题的原因是您将图像设置为PicList[0][0],并且该图像从未更改。正如Mike在上面所建议的,您需要:

for i,thisPic in enumerate(PicList):
     bitmap.setImage(thisPic) #not PicList[0][0]
但是,也许您需要回到基础上来,以便实际使用试用处理程序来处理您的试用;-)

创建一个字典列表,其中一个字典代表一次试用,然后按顺序运行这些字典(告诉TrialHandler使用“顺序”而不是“随机”列表)。因此,您当前使用的循环应该只是创建条件指令列表,而不是运行试验。然后将该列表传递给审判处理程序::

trials = TrialHandler(trialTypes = myCondsListInOrder, nReps=1, method='sequential')
for thisTrial in trials:
    pic = thisTrial['pic']
    stim.setImage(pic)
    ...
    trials.addData('rt', rt)
    trials.addData('acc',acc)
此外,我不会使用excel格式输出数据,而是使用“长-宽”格式:

trials.saveAsWideText('mydataFile.csv')
致以最良好的祝愿,
乔恩

非常感谢!我在代码中更改了(A和D)。(C) 是拼错了,我的意思是“图片”。(B) “PicList”是指标题中定义的图片列表(s.a.:PicList=[a_n,n_a,a_e,e_a,e_n,n_e])嘿,Jon,谢谢你的回复。[2] 已在代码中更改,并且运行良好。[1] 我已经试过你的建议了,但是没有用,因为Piclist是一个ImageList列表。如果我只说.setImage(thisPic),则会发生以下错误:引发AttributeError,“无法理解请求的图像。”#确保我们退出我的问题是创建一个图片列表(a#n),将此列表与主要图片列表(im#a)关联,以便心理医生知道哪些图片处于正常状态。而不是循环每一秒并在每一秒中呈现所有六张图片。我再次更改了上面的代码。也许通过这种方式,我的意图变得更加明显……还有一条评论:trialHandler没有被使用,因为addData不起作用。如果有一个解决方案,其中trialhandler正在处理试验,而不是“if liste in ImageList”(如果在ImageList中列出)循环,那就太棒了……好的,我编辑了答案,解释了应该如何使用试验处理程序
for i,thisPic in enumerate(PicList):
     bitmap.setImage(thisPic) #not PicList[0][0]
trials = TrialHandler(trialTypes = myCondsListInOrder, nReps=1, method='sequential')
for thisTrial in trials:
    pic = thisTrial['pic']
    stim.setImage(pic)
    ...
    trials.addData('rt', rt)
    trials.addData('acc',acc)
trials.saveAsWideText('mydataFile.csv')