我希望将这段代码写成Pythonic风格。我的实际数组比这个例子大得多。
(5+10+20+3+2) / 5
print(np.mean(array, key=lambda x: x[1])) TypeError: mean() got an unexpected keyword argument 'key'
array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]
sum = 0
for i in range(len(array)):
sum = sum + array[i][1]
average = sum / len(array)
print(average)
import numpy as np
print(np.mean(array,key=lambda x:x[1]))
如何避免这种情况?我想使用第二个例子。
我正在使用Python 3.7
sum
函数接受一个起始值参数。如果你传递0.0
给它,那么分子将始终是浮点数,不用担心。此外,在math
模块中还有一个函数,fsum
。 - Peter Woodfloat
强制转换的方式比传递奇怪的0.0
值参数更加易于理解,但两种方式的结果相同。 - ruoholafsum
可能是最好的选择。 - Peter Woodfrom __future__ import division
吗? - DanielSankfsum
的另一个优点是它会跟踪部分和,这弥补了浮点表示中精度不足的问题。因此,如果我们继续使用fsum
,就根本不需要考虑整数除法,而且通常也是更好的解决方案。请参见我的答案关于 Kahan Summation 在 [tag:c++] 中。 - Peter Wood