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

时间:2015-09-14 13:54:17

标签: psychopy

说我生成了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同样会导致下一次抽奖时出错。

当然,每当点/元素的数量发生变化时,解决方案当然是要实例化全新的DotStimElementArrayStim,但这似乎太重了。

2 个答案:

答案 0 :(得分:1)

可以修复DotStim

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

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

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

答案 1 :(得分:0)

是的,能够做到这一点会很高兴,但我还没有找到它。当nDots / nElements发生变化时必须运行的代码非常接近于从头开始使用新的激励。 init 因此正确地添加了这个&#39;可能意味着一些重构(将很多 init 代码移动到setNDots()中,然后从 init 调用它。)

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

基本上,这个问题有点棘手,并不是我的首要任务。