2

map(sum、zip(* list))よりも高速なリストを合計する方法を誰かが提案できるかどうか知りたいです。

例:

import timeit

print timeit.Timer('''
[ (a[x]+b[x]+c[x]) for x in xrange(len(a)) ]
''', '''
a = range(200)
b = range(199,-1,-1)
c = range(1,201)
''').timeit(number = 1000)

print timeit.Timer('''
map(sum,zip(*d))
''', '''
a = range(200)
b = range(199,-1,-1)
c = range(1,201)
d = [a,b,c]''').timeit(number = 1000)

print timeit.Timer('''
[sum(x) for x in zip(*d)]
''', '''
a = range(200)
b = range(199,-1,-1)
c = range(1,201)
d = [a,b,c]''').timeit(number = 1000)

結果:

0.0317891459248 #list comprehension
0.0406545608382 #sum with zip
0.0532605665307 #map sum with zip

注:私はつまらないことを知っていますが、誰かがより良い提案を持っているかどうかだけ興味があります。

4

1 に答える 1

7

これはどう?

print timeit.Timer('''
d.sum(axis=0)
''', '''
import numpy as np
a = range(200)
b = range(199,-1,-1)
c = range(1,201)
d = np.array([a,b,c])''').timeit(number = 1000)

もちろん、これはリストにある種の数値タイプが含まれていることを前提としています...

于 2012-07-19T14:43:35.780 に答える