Numpy vs list assrehension, which is faster?

I tested a simple speed test comparing numpy and python comprehension, and obviously list comprehension was faster. It is right?

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 
+4
source share
2 answers

I think you might need to change your testing parameter:

 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 vs List mapping timeout ratio:

10: 0.6x

100: 3.1x

1000: 9x

10000: 46x

Thus, Numpy is much faster with large N

+14
source

Your size too small. I tried again with size=1000000 and numpy exceeded list comprehension by 9x.

I suppose numpy has a higher tuning overhead, but overall for non-trivial input sizes (10 is certainly trivial) you can expect it to be at least as fast as list comprehension, and in most cases much faster.

+10
source

Source: https://habr.com/ru/post/1401457/


All Articles