私は、ログ関数(整数用)を多用し、何十億もの呼び出しを行う計算プロジェクトを持っています。私はnumpyのログのパフォーマンスが驚くほど遅いことを知っています。numpyのログ機能はどうなりますか?パフォーマンスを改善する方法はありますか?
次のコードは、完了するまでに15〜17秒を要し:
import numpy as np
import time
t1 = time.time()
for i in range(1,10000000):
np.log(i)
t2 = time.time()
print(t2 - t1)
しかし、math.log関数は3〜4秒からはるかに少ない時間を要します。
import math
import time
t1 = time.time()
for i in range(1,10000000):
math.log(i)
t2 = time.time()
print(t2 - t1)
私もmatlabとC#をテストしました。これは、それぞれ約2秒とわずか0.3秒かかる。
MATLAB
tic
for i = 1:10000000
log(i);
end
toc
C#
var t = DateTime.Now;
for (int i = 1; i < 10000000; ++i)
Math.Log(i);
Console.WriteLine((DateTime.Now - t).TotalSeconds);
私は、ログ機能のパフォーマンスを向上させることができますPythonでどのような方法はありますか?
私はその答えにかなり興味があります。私はちょうどソースコードに入ったので、特に関数をトレースすることは困難です。ソースコードの左側には、次のように書かれています。 __doc__から復元されました。誰でもソースコードの仕組みを説明できますか? –
答えはここにあるようですhttp://stackoverflow.com/questions/3650194/are-numpys-math-functions-faster-than-pythons?rq=1 – Bathsheba
'np.log'は、以下の配列で動作するように最適化されています。単一の値ではなく、値。たとえば、 'np.log(np.arange(1,10000000))'(その範囲の整数の配列のログ)は私にとって約120msかかります。 –