说我生成了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
同样会导致下一次抽奖时出错。
当然,每当点/元素的数量发生变化时,解决方案当然是要实例化全新的DotStim
或ElementArrayStim
,但这似乎太重了。
答案 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来说不是一个问题)
基本上,这个问题有点棘手,并不是我的首要任务。