0

我希望我能在我一直在研究的一段 python 代码上得到一些帮助。我正在尝试做的是在基于 python 的刺激演示软件上评估任务期间的帧速率。这是我所拥有的:

frame1 = 0.0152
frame2 = visual.getMsPerFrame(win, nFrames = 60, showVisual=False, msg='', msDelay=0.0)
frame3 = frame2 - frame1

我遇到的问题是“frame2”产生了一组数字。具体来说,它将产生平均值、中位数和标准差。因此,“frame3”会崩溃。无论如何getMsPerFrame()要从输出中提取平均值以便“frame3”实际运行?

我对编程很陌生,所以我对这些东西不太熟悉。

4

1 回答 1

0

看起来您正在使用psychopy模块,根据它的源代码显示getMsPerFrame()返回:

return msPFavg, msPFstd, msPFmed #, msdrawAvg, msdrawSD, msfree

Hash 符号 ( #) 是 Python 中的注释,因此这意味着返回的值是一个元组。如果返回值是数组,则可以像这样访问所需的值:

>>> print(getMsPerFrame())
(123, 90, 154)
>>> print(getMsPerFrame()[0])
123

正如您所看到的,这是一个相当糟糕的设计,因为它需要阅读源代码才能理解您所追求的数字的含义。如果您将来发现自己处于类似情况,我将留下原始答案。


如果visual.getMsPerFrame()返回这样的字典:

>>> 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 时玩得很开心)像这样的元组列表怎么样:

>>> print(frame2)
[('max', 154), ('avg', 123), ('min', 90)]

这里的列表理解更容易理解:

>>> print([value for key, value in frame2 if key=='avg'][0])
123
于 2013-08-12T21:38:51.340 回答