繁体   English   中英

了解PsychoPy的数据记录

Understanding PsychoPy's data logging

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个测试PsychoPy Builder脚本,我用它来调查一些反直觉的行为。 结构是四个例程:

“初始化”,不是循环,“开始实验”中的以下代码:

x = 0
y = 0
z = 0
foo = [0, 0, 0]

“一个”,在循环中,“结束例程”中的以下代码:

x = x + 1
foo[0] = foo[0] + 1

thisExp.addData("x", x)
thisExp.addData("y", y)
thisExp.addData("z", z)
thisExp.addData("foo", foo)

循环中的“Two”,“End Routine”中的以下代码:

y = y + 2
foo[1] = foo[1] + 2


thisExp.addData("x", x)
thisExp.addData("y", y)
thisExp.addData("z", z)
thisExp.addData("fooY", foo[1])
thisExp.addData("foo", foo)

“三个”,循环中,“结束例程”中的以下代码:

z = z + 3
foo[2] = foo[2] + 3

thisExp.addData("x", x)
thisExp.addData("y", y)
thisExp.addData("z", z)
thisExp.addData("foo", foo)

没有其他代码,没有其他组件。 例程“One”,“Two”和“Three”形成一个循环,按顺序执行五次。 CSV输出文件的相关列如下:

trials.thisRepN trials.thisTrialN   trials.thisN    trials.thisIndex    x   y   z   foo         fooY
0               0                   0               0                   1   2   3   [5, 10, 15] 2
1               0                   1               0                   2   4   6   [5, 10, 15] 4
2               0                   2               0                   3   6   9   [5, 10, 15] 6
3               0                   3               0                   4   8   12  [5, 10, 15] 8
4               0                   4               0                   5   10  15  [5, 10, 15] 10

这是预期的产出吗? 如果是这样,为什么? 请注意,各个变量x,y和z每次都在循环中显示更新的值(在循环结束时),而列表foo仅在循环迭代五次后显示最终值,但它在每一行都显示了这一点。 但是调用列表中的各个元素会显示为单个变量。

这背后的逻辑和理由是什么?

有没有办法使列表输出像其他人一样执行?

有没有办法强制输出捕获/显示任何这些变量,就像调用addData()时一样,而不是等到循环结束?

1 个回复

我想我知道这里出了什么问题。 这可能是因为python通过引用而不是复制来分配。 这在别处详细解释,但简要说明,

original = [1, 2]
new = original  # new is simply a reference to original! It is not a copy.
new[0] = 'Oops'  # original is now ['Oops', 2] as is new (which is just a reference or pointer

在您的情况下,TrialHandler接收引用,该引用仅指向在整个实验中更新的“foo”变量。 由于日志仅保存在实验结束时,“foo”中的所有行现在都指向“foo变量”,现在它保存值[5,10,15]。

这个引用分配可以非常漂亮和方便,但有时会引起头痛,就像你的例子。 它适用于所有python mutable:列表,dicts,函数和类。 但不是为了不变量,如数字,元组和字符串! 这就是为什么你的脚本适用于数字但不适用于列表的原因。

有不同的解决方案。 最简单的可能是更换addData与调用thisExp.addData("foo", tuple(foo))其中可变列表转换为不可变的元组。 也可以执行thisExp.addData("foo", [x for x in foo]) 针对各种对象的更全面的解决方案是在实验开始时运行import copy ,然后在其他代码块中添加类似thisExp.addData("foo", copy.copy(foo))的数据(如果有的话)一个复杂的对象,请使用copy.deepcopy )。

1 解读Psychopy / iohub Tobii Gaze数据

我使用Psychopy / iohub和Tobii TX300眼动仪记录了凝视数据。 加载hdf5文件会在BinocularEyeSampleEvent中显示以下条目: 它们与官方文档中描述的不同,因此我在哪里可以找到数据含义的准确描述? 例如,什么是PPD,测量类型'77'是什么意 ...

2 PsychoPy记录多次鼠标单击

我正在使用PsychoPy编码器创建实验,不确定如何实现多次鼠标单击。 在实验中,有多个目标和干扰因素,并且在响应期间,个人将选择目标。 但是,我目前拥有它,如果您单击目标之一,则会收到正确的消息,否则会收到不正确的消息。 我还有一个函数,它将等待鼠标单击以找到反应时间,并在鼠标单击后给出 ...

3 在Windows上的PsychoPy中记录屏幕触摸开始的时间

我正在帮助在Windows 8平板电脑上使用PsychoPy实施一项实验。 似乎无法通过PsychoPy或pyglet或PyGame接口直接访问触摸事件。 我发现的大多数其他资源都提到使用鼠标移动事件代替触摸事件。 这适用于录制位置,但对于录制时间,它对我们不起作用。 我们想收集触摸 ...

4 我可以在PsychoPy中记录预期的按键操作吗?

我在PsychoPy中有一个连续的反应时间任务,可能会导致参与者先发制人地输入对未来刺激的关键反应。 这是我当前的问题是: 正确答案:1:A,2:B,3:C 刺激:1->响应:A 刺激:2->回应:B,先发制人的回应:C 刺激:3->响应:未 ...

5 Python / Psychopy:记录鼠标单击位置

使用下面的代码,我试图打开一个窗口10秒钟,让用户在屏幕上的任意位置单击任意次数,并且希望记录鼠标单击的位置。 每次用户在窗口中单击(即myMouse.getPressed)时,我都会将单击位置附加到列表(mouse_click_locations [])。 但是,列表在每个框架上多次附加相 ...

6 PsychoPy:无法从并行端口读取数据

我在Windows 7计算机上使用Psychopy v1.82.01(编码器视图)来运行fMRI实验。 我想从并行端口读取data()(用于记录按钮按下以及从扫描器接收触发器以进行同步)。 但是,当我使用readData()或readPin()时,所有引脚似乎都保持低电平('0')。 ...

7 如何在简单的Psychopy实验中仅记录有效的按键

我是Python的新手,正在编写一个简单的心理学实验。 简而言之,我向参与者展示一系列随机图像,如果他们在给定图像中检测到面部,则让他们按下一个键。 我的问题之一是,当参与者按下按键的速度太快时,程序会崩溃-也就是说,我注意到即使参与者在没有图像的情况下按下按键,程序也会记录响应。 每 ...

8 PsychoPy- event.getKeys()未正确记录按键列表

我试图让用户能够通过按向上或向下键来调整心理状态下显示的行的长度。 我正在使用event.getKeys(),但是,它没有记录所按下的键。 我不确定为什么,但是它总是显示一个空的键列表。 这是我的代码: ...

9 PsychoPy:记录用户输入字符串

我有一个PsychoPy例程,旨在充当内存对象跨度测试。 在一个循环中,软件呈现一个对象(单个文本字符),然后是多次用户任务。 软件会记住字符串,然后要求用户输入显示的字符。 这个序列(任务循环后跟字符调用)本身在一个更大的循环中呈现了几次。 字符是随机选择的。 我想在Psyc ...

10 是否在PsychoPy中记录所有按键以及等待按键? [关闭]

我正在使用PsychoPy做实验。 我有一个简单的实验,每次按下某个键时屏幕都会改变。 这很简单,为此我使用了event.waitKeys()。 但是,我希望运行一个“后台”过程(不确定正确的术语),在该过程中记录每个按键,包括不触发刺激的按键,或在屏幕过渡期间发生的按键。 有没有办 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM