Skip to content

Instantly share code, notes, and snippets.

@iliakonnov
Created June 27, 2016 15:18
Show Gist options
  • Save iliakonnov/641adcb1687e3c2cf03c832362d384ab to your computer and use it in GitHub Desktop.
Save iliakonnov/641adcb1687e3c2cf03c832362d384ab to your computer and use it in GitHub Desktop.
$ inxi
CPU~Quad core AMD Athlon X4 750K (-MCP-) speed/max~1400/3400 MHz Kernel~4.4.0-24-generic x86_64 Up~9:05 Mem~2784.2/7927.0MB HDD~3000.6GB(19.5% used) Procs~215 Client~Shell inxi~2.2.35
$ python test.py
Average:
For loop: 0.000379131793976
Operator: 0.000367625951767
Lambda 1: 0.000438968896866
Lambda 2: 0.000436615228653
Numpy array 1: 5.86407184601e-05
Numpy array 2: 5.91254234314e-06
Numpy list: 6.16874694824e-05
Best:
For loop: 0.000356912612915, 0.000357151031494, 0.000357151031494, 0.000357866287231, 0.000358819961548
Operator: 0.000349044799805, 0.000349044799805, 0.000349998474121, 0.000349998474121, 0.000349998474121
Lambda1: 0.000415802001953, 0.000415802001953, 0.000416040420532, 0.000416040420532, 0.000416994094849
Lambda2: 0.00041389465332, 0.000414848327637, 0.000414848327637, 0.000415086746216, 0.000415086746216
Numpy array 1: 0.000125885009766, 5.48362731934e-05, 5.48362731934e-05, 5.48362731934e-05, 5.50746917725e-05
Numpy array 2: 1.00135803223e-05, 1.19209289551e-05, 1.19209289551e-05, 1.19209289551e-05, 1.28746032715e-05
Numpy list: 5.88893890381e-05, 5.88893890381e-05, 5.88893890381e-05, 5.88893890381e-05, 5.88893890381e-05
Worst:
For loop: 0.000576972961426, 0.000513076782227, 0.000487089157104, 0.00047492980957, 0.000442028045654
Operator: 0.000602960586548, 0.000510215759277, 0.000471115112305, 0.000465154647827, 0.000458002090454
Lambda1: 0.000913143157959, 0.000598907470703, 0.000557899475098, 0.000545978546143, 0.000531911849976
Lambda2: 0.000600099563599, 0.000571012496948, 0.000563859939575, 0.000523090362549, 0.000523090362549
Numpy array 1: 9.41753387451e-05, 9.3936920166e-05, 9.17911529541e-05, 9.10758972168e-05, 9.01222229004e-05
Numpy array 2: 9.05990600586e-06, 9.05990600586e-06, 7.86781311035e-06, 7.86781311035e-06, 7.86781311035e-06
Numpy list: 9.60826873779e-05, 8.79764556885e-05, 8.60691070557e-05, 8.29696655273e-05, 8.10623168945e-05
from timeit import default_timer as timer
import operator
import numpy
dataLen = 1000
testsNum = 1000
def forTest(data):
'''http://stackoverflow.com/a/13843424/4079458'''
result = 1
for i in data:
result *= i
return result
def operatorTest(data):
'''http://stackoverflow.com/a/13843424/4079458'''
return reduce(operator.mul, data)
def lambda1Test(data):
'''http://stackoverflow.com/a/13843424/4079458'''
return reduce(lambda x, y: x * y, data)
def lambda2Test(data, func):
'''Based on http://stackoverflow.com/a/13843424/4079458'''
return reduce(func, data)
def numpyTest_npArray1(data):
'''http://stackoverflow.com/a/13843424/4079458'''
return numpy.prod(numpy.array(data))
def numpyTest_npArray2(npArray):
'''Based on http://stackoverflow.com/a/13843424/4079458'''
return numpy.prod(npArray)
def numpyTest_list(data):
'''http://stackoverflow.com/questions/13840379/#comment62946675_32426539'''
return numpy.prod(data)
def test(func, *args, **kwargs):
start = timer()
func(*args, **kwargs)
end = timer()
return end - start
forResults = []
operatorResults = []
lambda1Results = []
lambda2Results = []
numpyResults_npArray1 = []
numpyResults_npArray2 = []
numpyResults_list = []
data = range(1, dataLen + 1)
func = lambda x, y: x * y
npArray = numpy.array(data)
for i in xrange(1000):
forResults.append(test(forTest, data))
operatorResults.append(test(operatorTest, data))
lambda1Results.append(test(lambda1Test, data))
lambda2Results.append(test(lambda2Test, data, func))
numpyResults_npArray1.append(test(numpyTest_npArray1, data))
numpyResults_npArray2.append(test(numpyTest_npArray2, npArray))
numpyResults_list.append(test(numpyTest_list, data))
print('''Average:
For loop: {forLoop}
Operator: {op}
Lambda 1: {lmb1}
Lambda 2: {lmb2}
Numpy array 1: {npArr1}
Numpy array 2: {npArr2}
Numpy list: {npLst}'''.format(forLoop=sum(forResults) / len(forResults),
op=sum(operatorResults) / len(operatorResults),
lmb1=sum(lambda1Results) / len(lambda1Results),
lmb2=sum(lambda2Results) / len(lambda2Results),
npArr1=sum(numpyResults_npArray1) / len(numpyResults_npArray1),
npArr2=sum(numpyResults_npArray2) / len(numpyResults_npArray2),
npLst=sum(numpyResults_list) / len(numpyResults_list)))
forResults = map(str, forResults)
operatorResults = map(str, operatorResults)
lambda1Results = map(str, lambda1Results)
lambda2Results = map(str, lambda2Results)
numpyResults_npArray1 = map(str, numpyResults_npArray1)
numpyResults_npArray2 = map(str, numpyResults_npArray2)
numpyResults_list = map(str, numpyResults_list)
print('''Best:
For loop: {forLoop}
Operator: {op}
Lambda1: {lmb1}
Lambda2: {lmb2}
Numpy array 1: {npArr1}
Numpy array 2: {npArr2}
Numpy list: {npLst}'''.format(forLoop=', '.join(sorted(forResults)[:5]),
op=', '.join(sorted(operatorResults)[:5]),
lmb1=', '.join(sorted(lambda1Results)[:5]),
lmb2=', '.join(sorted(lambda2Results)[:5]),
npArr1=', '.join(sorted(numpyResults_npArray1)[:5]),
npArr2=', '.join(sorted(numpyResults_npArray2)[:5]),
npLst=', '.join(sorted(numpyResults_list)[:5])))
print('''Worst:
For loop: {forLoop}
Operator: {op}
Lambda1: {lmb1}
Lambda2: {lmb2}
Numpy array 1: {npArr1}
Numpy array 2: {npArr2}
Numpy list: {npLst}'''.format(forLoop=', '.join(reversed(sorted(forResults)[-5:])),
op=', '.join(reversed(sorted(operatorResults)[-5:])),
lmb1=', '.join(reversed(sorted(lambda1Results)[-5:])),
lmb2=', '.join(reversed(sorted(lambda2Results)[-5:])),
npArr1=', '.join(reversed(sorted(numpyResults_npArray1)[-5:])),
npArr2=', '.join(reversed(sorted(numpyResults_npArray2)[-5:])),
npLst=', '.join(reversed(sorted(numpyResults_list)[-5:]))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment