リスト内の数値の累積和を効率的に計算する方法
数値データを処理する場合、多くの場合、次の累積和を計算する必要があります。リスト内の数字。ここでは、包括的なソリューションを提供し、リストの要素を手動で合計しようとしたユーザーによって引き起こされた問題に対処します。
たとえば、time_interval = [4, 6, 12] とすると、ユーザーは次のことを目的としています。 [4, 4 6, 4 6 12] を計算して累積和 t = [4, 10, 22].
手動アプローチ:
ユーザーは最初、リストを反復処理して合計を累積するという手動アプローチを試みました:
t1 = time_interval[0] t2 = time_interval[1] + t1 t3 = time_interval[2] + t2 print(t1, t2, t3) # -> 4 10 22
ただし、このアプローチには明示的な反復が必要であり、大規模な場合は退屈になる可能性があります。 lists.
Numpy の実装:
配列に対して数値演算を頻繁に実行する場合は、累積加算用の組み込み関数cumsum を提供する numpy が強く推奨されるライブラリです。 。 numpy を使用すると、累積合計を効率的に計算できます。
import numpy as np a = [4, 6, 12] np.cumsum(a) #array([4, 10, 22])
パフォーマンスの比較:
Numpy は、多くの場合、このような数値演算では純粋な Python 実装よりも優れています。 numpy のcumsum とユーザーの手動累積関数 (accumu) を比較すると、その違いがわかります。
In [136]: timeit list(accumu(range(1000))) 10000 loops, best of 3: 161 us per loop In [137]: timeit list(accumu(xrange(1000))) 10000 loops, best of 3: 147 us per loop In [138]: timeit np.cumsum(np.arange(1000)) 100000 loops, best of 3: 10.1 us per loop
numpy は依存関係を導入する可能性がありますが、同様の数値演算を頻繁に実行する場合、その効率性によりその使用が正当化される可能性があります。
以上が数値リストの累計を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。