私はあなたがnumpy
解決策を望んでいることを知っているので、これはその基準を満たしていません (@eumiro の以前の投稿は確かにそうです) が、別の方法として、ここに最適化された Python バージョンがあります。
speeds = [i for i in speed if i > 0]
return sum(speeds) / (1.0 * len(speeds)) if sum(speeds) > 0 else 0.0
これを numpy (または元の) 実装と速度の点で比較すると興味深いかもしれません。
In [14]: timeit original(speed) # original code
1000 loops, best of 3: 1.13 ms per loop
In [15]: timeit python_opt(speed) # above Python 2 liner
1000 loops, best of 3: 582 us per loop
In [16]: timeit avg_positive_speed(speed) # numpy code
1000 loops, best of 3: 1.2 ms per loop
どこ
speed = range(10000)
私はそれがここで優位に立つと思っていたnumpy
だろう..なぜそれが後を引くのか誰か知っている?
アップデート:
とspeed = range(100000)
:
In [19]: timeit original(speed)
100 loops, best of 3: 12.2 ms per loop
In [20]: timeit python_opt(speed)
100 loops, best of 3: 11 ms per loop
In [21]: timeit avg_positive_speed(speed)
100 loops, best of 3: 12.5 ms per loop
膨大な数の速度がない限り、この特定の問題numpy
に対する優れたツールであるとはまだ確信していません:)
numpy はメモリをどのように処理しますか? リストの理解は、ある時点でいくつかの制限にぶつかります。