繁华开满天机
正如@DeepSpace 所建议的那样,您应该尝试自己回答这个问题。您还可以考虑在使用之前将列表转换为数组numpy.mean。使用%timeit如下ipython:In [1]: import randomIn [2]: import numpyIn [3]: from functools import reduceIn [4]: l = random.sample(range(0, 100), 50) # generates a random list of 50 elementsnumpy.mean无需转换为 np.arrayIn [5]: %timeit numpy.mean(l)32.5 µs ± 2.82 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)numpy.mean转换为 np.arrayIn [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 3774 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)reduceIn [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)无需转换为数组numpy.mean(a)将列表转换为np.arrayreduce(lambda x, y: x + y, l) / len(l)sum(l) / float(len(l)), 这适用于 Python 2 和 3sum(l) / len(l)# 对于 Python 3,你不需要强制转换(使用float)
RISEBY
下午好,我刚刚对列表中的 10 个随机浮点数进行了测试,并进行了时间测试,发现 numpy 是最快的。#!/usr/bin/pythonimport numpy as npfrom functools import reduceimport timel = [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()与往常一样,我确信有更好的方法可以做到这一点,但这可以解决问题。这是一个小列表:看看你在大列表中找到了什么会很有趣。