我希望能在我正在处理的一段python代码上得到一些帮助。我尝试做的是在基于python的刺激演示软件的任务期间评估帧速率。这就是我所拥有的:
frame1 = 0.0152
frame2 = visual.getMsPerFrame(win, nFrames = 60, showVisual=False, msg='', msDelay=0.0)
frame3 = frame2 - frame1
我遇到的问题是"第2帧"产生一组数字。具体而言,它将产生平均值,中值和标准差。因此," frame3"会崩溃。无论如何,只取出getMsPerFrame()
输出中的平均值,以便" frame3"实际上会运行吗?
我对编程很陌生,所以我对这些东西不太熟悉。
答案 0 :(得分:0)
看起来您正在使用psychopy模块,根据它source code显示getMsPerFrame()
返回:
return msPFavg, msPFstd, msPFmed #, msdrawAvg, msdrawSD, msfree
哈希符号(#
)是Python中的注释,因此这意味着返回的值是一个元组。如果返回值是这样的数组,则可以按照与之相同的方式访问所需的值:
>>> print(getMsPerFrame())
(123, 90, 154)
>>> print(getMsPerFrame()[0])
123
正如您所看到的,这是一个相当糟糕的设计,因为它需要阅读源代码才能理解您所追求的数字的含义。我将离开原来的答案,以防您将来发现自己处于类似情况。
如果visual.getMsPerFrame()
返回了这样的Dict:
>>> print(frame2)
{'max': 154, 'avg': 123, 'min': 90}
然后您可以按照以下名称访问部分内容:
>>> print(frame['avg'])
123
如果它返回这样的数组:
>>> print(frame2)
[154, 123, 90]
然后你必须知道哪个元素是平均值。假设第二个它看起来像这样(数组是零索引):
>>> print(frame[1])
123
如果它返回了一系列像这样的词组:
>>> print(frame2)
[{'max': 154}, {'avg': 123}, {'min': 90}]
你可以使用这样的列表理解:
>>> print([item['avg'] for item in frame2 if item.keys()[0] == 'avg'][0])
123
(好吧,这有点傻了,请发布print(frames2)
的输出)好一个(我现在学习Python很有趣)这样的元组列表怎么样:< / p>
>>> print(frame2)
[('max', 154), ('avg', 123), ('min', 90)]
这里列表理解更容易理解:
>>> print([value for key, value in frame2 if key=='avg'][0])
123