我进行了一个简单的速度测试,比较numpy和python列表理解,显然列表理解更快。那是对的吗?
import sys, numpy from datetime import datetime def numpysum(n): a = numpy.arange(n) ** 2 b = numpy.arange(n) ** 3 return a + b def pythonsum(n): a = [i ** 2 for i in range(n)] b = [i ** 3 for i in range(n)] return [a[i] + b[i] for i in range(n)] size = 10 start = datetime.now() c1 = pythonsum(size) delta1 = datetime.now() - start start = datetime.now() c2 = numpysum(size) delta2 = datetime.now() - start print c1 print c2 print delta1 print delta2
我认为您可能需要考虑更改测试参数:
In [39]: %timeit pythonsum(10) 100000 loops, best of 3: 8.41 us per loop In [40]: %timeit pythonsum(100) 10000 loops, best of 3: 51.9 us per loop In [41]: %timeit pythonsum(1000) 1000 loops, best of 3: 451 us per loop In [42]: %timeit pythonsum(10000) 100 loops, best of 3: 17.9 ms per loop In [43]: %timeit numpysum(10) 100000 loops, best of 3: 13.4 us per loop In [44]: %timeit numpysum(100) 100000 loops, best of 3: 17 us per loop In [45]: %timeit numpysum(1000) 10000 loops, best of 3: 50.3 us per loop In [46]: %timeit numpysum(10000) 1000 loops, best of 3: 385 us per loop
numpy与列表理解时间的比率:
10:0.6倍 100:3.1倍 1000:9倍 10000:46x
10:0.6倍
100:3.1倍
1000:9倍
10000:46x
因此,对于大型,Numpy要快得多N。
N