2012-03-14 4 views
4

私はnumpyとpython list comprehensionを比較する単純なスピードテストを実行しました。明らかにリストの理解度は速かったです。あれは正しいですか?numpy対list comprehensionは、より速いですか?

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 

答えて

14

私はあなたのテストのパラメータを変更することを検討したいかもしれないと思う:リスト内包タイミング対numpyのの

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 

比:

10:0.6X

100:3.1 x

1000:9x

10000:46X

したがって、numpyのは、大規模なNのためにはるかに高速です。

10

sizeが小さすぎます。私はsize=1000000で再試行し、numpyはリストの理解度を9倍上回った。

私はnumpyがセットアップオーバーヘッドが高いと推測していますが、一般的ではない入力サイズでは(少なくとも10は間違いありません)、少なくともリスト内包と同じくらい速く、ほとんどの場合はもっと早く。

関連する問題