PsychoPy:如何更改 DotStim 或 ElementArrayStim 中的元素数量?

PsychoPy: How to change number of elements in DotStim or ElementArrayStim?

假设我生成了一个 dots = psychopy.visual.DotStim。以后可以更改点数吗? dots.nDots = 5 导致下一个 dots.draw() 错误,因为基础矩阵不匹配:

Traceback (most recent call last):
  File "/home/jonas/Documents/projects/work pggcs/experiment/dots.py", line 32, in <module>
    dots_right.draw()
  File "/usr/lib/python2.7/dist-packages/psychopy/visual/dot.py", line 279, in draw
    self._update_dotsXY()
  File "/usr/lib/python2.7/dist-packages/psychopy/visual/dot.py", line 362, in _update_dotsXY
    self._verticesBase[:,0] += self.speed*numpy.reshape(numpy.cos(self._dotsDir),(self.nDots,))
  File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 218, in reshape
    return reshape(newshape, order=order)
ValueError: total size of new array must be unchanged

psychopy.visual.ElementArrayStim 也是如此,设置 stim.nElements = 5 同样会导致下一次抽奖出错。

一个解决方案当然是在每次 dots/elements 的数量发生变化时实例化一个全新的 DotStimElementArrayStim 但这似乎太重了。

可以修复 DotStim:

dots.nDots = 5
dots._dotsDir = [0]*dots.nDots
dots. _verticesBase = dots._newDotsXY(dots.nDots)

这会将所有点的移动设置为 0,但您可以将该值更改为您喜欢的任何值或为单个点指定。这是一个 hack,如果您修改 DotStim 的其他方面,它可能会崩溃。

我还没有找到 ElementArrayStim 的解决方案。

是的,如果能够做到这一点就好了,但我还没有抽出时间去做。当 nDots/nElements 发生变化时,代码必须是 运行 非常接近于从头开始使用新的刺激。init 因此将其添加到 'correctly' 可能意味着一些重构(将大量 init 代码移动到 setNDots() 中,然后从 init 中调用它)。

还有一个潜在的问题,即元素可能已更改(例如,用户已设置方向),然后更新元素的数量。我们删除哪些?我们给那些我们添加的人什么方向? (虽然这对 DotStim 来说不是什么问题)

基本上,这个问题有点棘手,对我来说不是优先事项。