3

このコードをプロファイリングすると、ログ操作に多くの時間が費やされていることがわかります。より効率的にPython 3でこれを書く別の方法はありますか? ループをリスト内包表記に置き換えると、実際には効率が低下し、ラムダのためにマップも同様でした。

def log_total(data): 
    total = 0.0   
    log = log(data) 
    for i in range(10000): 
        total += log/(i+1)  
    return total

ありがとう!

4

2 に答える 2

9

私はあなたの合計から因数log分解し、あなたの合計をキャッシュします:

harmonic_series = sum(1. / i for i in range(1, 10001))  # Thanks, @mgilson

def log_total(data): 
    return log(data) * harmonic_series

PyPyを使用してさらに高速化することもできます。

于 2012-12-23T03:40:36.640 に答える
0

lambda次のように、オンラインで書き込むことができます。

total = lambda data: log(data) * sum(1.0 / i for i in xrange(1, 10001))

使用しPython 2.7.3ました。

于 2012-12-23T04:53:58.390 に答える