- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个测试 PsychoPy Builder 脚本,我用它来调查一些反直觉的行为。其结构为四个例程:
“Init”,不在循环中,“Begin Experiment”中的代码如下:
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)
“二”,循环中,“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)
没有其他代码,没有其他组件。例程“一”、“二”和“三”按该顺序形成一个循环,执行五次。 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() 时捕获/显示任何这些变量,而不是等到循环结束?
最佳答案
我想我知道这里出了什么问题。这可能是因为 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 可变变量:列表、字典、函数和类。但不适用于不可变的东西,比如数字、元组和字符串!这就是为什么您的脚本适用于数字但不适用于列表。
有不同的解决方案。最简单的可能是将 addData
调用替换为 thisExp.addData("foo", tuple(foo))
,它将可变列表转换为不可变元组。还可以执行 thisExp.addData("foo", [x for x in foo])
。针对各种对象的更全面的解决方案是在实验开始时运行 import copy
,然后添加数据,如 thisExp.addData("foo", copy.copy(foo ))
在其他代码块中(如果您有一个复杂的对象,请使用 copy.deepcopy
代替)。
关于psychopy - 了解 PsychoPy 的数据记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29362421/
我知道当持续时间固定时,例程将使用防滑计时,如流程中的绿色所示。我的例行程序的持续时间在某种程度上是固定的,因为结束例行程序并不依赖于响应。然而,组件的持续时间确实会改变预定义的量(由电子表格中的条件
我有一个测试 PsychoPy Builder 脚本,我用它来调查一些反直觉的行为。其结构为四个例程: “Init”,不在循环中,“Begin Experiment”中的代码如下: x = 0 y =
我使用 Psychopy/iohub 和 Tobii TX300 眼动仪记录了注视数据。加载 hdf5 文件会在 BinlingualEyeSampleEvent 中显示以下条目: ['experim
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我在通过Psychopy播放自定义音频文件时遇到困难。我收到一条消息说: AttributeError: No audio API found. Try installing pyo 0.6.8+,
我正在尝试编写一段代码,需要依次查看 200 个文本刺激 1 秒,但我无法让我的代码正常工作。 每个刺激都被预定义为一个变量: redkey = visual.textStim(win, "key",
我正在 Psychopy 1.85.1 中实现一个实验。 该任务将在 1920 x 1080 显示器(即 16:9 宽高比)上执行。 而不是通过以下方式更改我使用的每个单独视觉图像对象的大小: som
我使用 Standalone PsychoPy v1.80.03 编写了一个点探测范式。在点探针之后,我需要一个看起来与点探针相同的修改任务。因此,我在第二个任务的构造函数中传递了点探测对象,以重新使
我现在正在 PsychoPy 中闲逛,试图为类项目修改 Sternberg 演示。我希望刺激文本(数字集)以多种颜色显示:比如说,一个数字是红色的,下一个是蓝色的,下一个是棕色的,等等。同一刺激中的多
我在 Windows 7 计算机上使用 Psychopy v1.82.01(编码器 View )来运行 fMRI 实验。我想从并行端口读取数据()(用于记录按钮按下和从扫描仪接收触发器以进行同步)。但
我正在使用 psychopy 在这样的窗口上获取图像: from psychopy import visual window = visual.Window(size= (1000,600), uni
我最近开始学习如何使用 PsychoPy、psychopy.parallel 模块和二进制表示。我希望有人可以让我知道我是否理解正确。 关于 PsychoPy 的 website ,它说这两个函数将引
我需要记录每次试验最后一次移动滚轮的时间。我有针对按键执行此操作的代码(lastTrialTime 变量): lastTime = 0 # setting up to get RT at last
Psychopy 中的纯音以滴答声结束。我怎样才能删除这些点击?在 psychopy 中生成的音调和作为 .wav 导入的音调都有同样的问题。我尝试在使用 Audacity 生成的 .wav 音调中添
我想在同一帧内显示一个包含不同颜色单词的句子。但我见过的所有代码只是改变整个刺激的颜色,而不是其中的一部分......这是我的尝试代码,但失败了 #!/usr/bin/env python2 # -*
我想通过编码在 Pyschopy 上显示一些日语句子,我使用了这样的代码: from Psychopy import visual,core win=visual.Window([400,400])
我正在尝试在我的心理任务中捕捉定时屏幕截图。我有一个固定十字,然后是屏幕左右两侧的 2 张面孔,然后是一个点。我只想要两张脸出现在屏幕上的 1 秒时间段的屏幕截图。例程中有 10 对不同的面孔,例程循
我的代码在这里可以工作,但是我目前的方法效率很低而且很耗时。我正在生成 4 个笛卡尔坐标并将它们附加到列表中。然后我创建 4 个 Psychopy 线对象 (visual.Line) 并从我的坐标列表
我正在致力于将心理实验与 Eyelink 眼球追踪系统相结合。做到这一点的方法似乎是通过 pylink 。不幸的是,我真的不熟悉 pylink,我希望有一个将两者结合起来的实验示例。我还没找到。如果有
这似乎是一个愚蠢的问题,但我无法在文档中找到如何在 PsychoPy Builder 实验中从用户那里获取文本输入。 例如,如果我有一个文本组件来显示消息“你叫什么名字?” 我想获取文本答案(按键回显
我是一名优秀的程序员,十分优秀!