2012-03-14 3 views
4

Я проверил простой тест скорости, сравнивающий понимание numpy и python, и, очевидно, понимание списка было быстрее. Это верно?numpy vs list assrehension, что быстрее?

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

Я думаю, вы могли бы хотеть рассмотреть изменения вашего параметра тестирования:

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.6x

100: 3,1 x

1000: 9x

10000: 46X

Таким образом, Numpy гораздо быстрее для больших N.

10

Ваш size слишком мал. Я попробовал снова с size=1000000, и numpy превзошел понимание списка на 9x.

Я предполагаю, что у numpy есть более высокие накладные расходы на настройку, но в целом для нетривиальных размеров ввода (10, безусловно, тривиально) вы можете ожидать, что он будет по крайней мере столь же быстрым, как понимание списка, и в большинстве случаев Быстрее.

Смежные вопросы