假设我生成了一个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 unchangedpsychopy.visual.ElementArrayStim也是如此,对其设置stim.nElements = 5同样会导致下一次抽签时出现错误。
当然,解决方案是在每次点/元素的数量发生变化时实例化一个全新的DotStim或ElementArrayStim,但这似乎太重了。
发布于 2015-09-14 13:58:03
它可以为DotStim修复
dots.nDots = 5
dots._dotsDir = [0]*dots.nDots
dots. _verticesBase = dots._newDotsXY(dots.nDots)将所有点的移动设置为0,但可以将该值更改为任何您喜欢的值,也可以为单个点指定。如果您修改DotStim的其他方面,这是一种可能会破坏的黑客行为。
我还没有想出ElementArrayStim的解决方案。
发布于 2015-09-15 09:12:47
是的,能这么做会很好,但我还没来得及解决。当nDot/nElements发生变化时必须运行的代码非常接近于从零开始使用新的刺激。init因此在“正确”中添加这一点可能意味着一些重构(将大量init代码移到setNDots()中,然后从init调用)。
还有一个潜在的问题,就是元素可能已经改变(例如,用户已经设置了方向),然后更新元素的数量。我们要移除哪些?我们应该给这些人什么样的方向呢?(不过,对于DotStim来说,这不是什么问题。)
基本上,这个问题有点棘手,对我来说没有优先考虑。
https://stackoverflow.com/questions/32566625
复制相似问题