2 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
正如@DeepSpace 所建議的那樣,您應(yīng)該嘗試自己回答這個(gè)問(wèn)題。您還可以考慮在使用之前將列表轉(zhuǎn)換為數(shù)組numpy.mean。使用%timeit如下ipython:
In [1]: import random
In [2]: import numpy
In [3]: from functools import reduce
In [4]: l = random.sample(range(0, 100), 50) # generates a random list of 50 elements
numpy.mean無(wú)需轉(zhuǎn)換為 np.array
In [5]: %timeit numpy.mean(l)
32.5 μs ± 2.82 μs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
numpy.mean轉(zhuǎn)換為 np.array
In [5]: a = numpy.array(a)
In [6]: %timeit numpy.mean(a)
17.6 μs ± 205 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
sum(l) / float(len(l))
In [5]: %timeit sum(l) / float(len(l)) # not required casting (float) in Python 3
774 ns ± 20.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
sum(l) / len(l)
In [5]: %timeit sum(l) / len(l)
623 ns ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
reduce
In [6]: reduce(lambda x, y: x + y, l) / len(l)
5.92 μs ± 514 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
從最慢到最快:
numpy.mean(l)
無(wú)需轉(zhuǎn)換為數(shù)組numpy.mean(a)
將列表轉(zhuǎn)換為np.array
reduce(lambda x, y: x + y, l) / len(l)
sum(l) / float(len(l))
, 這適用于 Python 2 和 3sum(l) / len(l)
# 對(duì)于 Python 3,你不需要強(qiáng)制轉(zhuǎn)換(使用float
)

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
下午好,我剛剛對(duì)列表中的 10 個(gè)隨機(jī)浮點(diǎn)數(shù)進(jìn)行了測(cè)試,并進(jìn)行了時(shí)間測(cè)試,發(fā)現(xiàn) numpy 是最快的。
#!/usr/bin/python
import numpy as np
from functools import reduce
import time
l = [0.1, 2.3, 23.345, 0.9012, .002815, 8.2, 13.9, 0.4, 3.02, 10.1]
def test1():
return np.mean(l)
def test2():
return sum(l) / float(len(l))
def test3():
return reduce(lambda x, y: x + y, l) / len(l)
def timed():
start = time.time()
test1()
print('{} seconds'.format(time.time() - start))
start = time.time()
test2()
print('{} seconds'.format(time.time() - start))
start = time.time()
test3()
print('{} seconds'.format(time.time() - start))
timed()
與往常一樣,我確信有更好的方法可以做到這一點(diǎn),但這可以解決問(wèn)題。這是一個(gè)小列表:看看你在大列表中找到了什么會(huì)很有趣。
添加回答
舉報(bào)