私は1つのプログラムでたくさんの対数計算を使わなければなりません。対数ベースに関しては、手順は特定ではありません。フックの下におそらく他のすべての基底a
がlog_a(x) = log_n(x)/log_n(a)
に変換されるので、基底n
(2?10?e?)がPython 3.5 math
モジュールで他のものより速いとすれば、私は疑問に思っていました。または、すべてのベースがCライブラリを使用して同じ方法で実装されるため、ベースの選択は計算の速度に影響しませんか?Pythonの対数計算の基礎は速度に影響しますか?
答えて
、math.log
はベースの独立したが、プラットフォームに依存しています。 C source for the math
moduleから、1940-1961行にはmath.log
のコードが表示されます。
math_log_impl(PyObject *module, PyObject *x, int group_right_1,
PyObject *base)
/*[clinic end generated code: output=7b5a39e526b73fc9 input=0f62d5726cbfebbd]*/
{
PyObject *num, *den;
PyObject *ans;
num = loghelper(x, m_log, "log"); // uses stdlib log
if (num == NULL || base == NULL)
return num;
den = loghelper(base, m_log, "log"); // uses stdlib log
if (den == NULL) {
Py_DECREF(num);
return NULL;
}
ans = PyNumber_TrueDivide(num, den);
Py_DECREF(num);
Py_DECREF(den);
return ans;
}
C log
機能がe
のための特別なチェックを持っていない限り、それは同じ速度で動作しますので、これは、どんな、数ベースの自然対数を計算しません。
この情報源はまた、他の答えのlog2
とlog10
がlog
より速いことを説明しています。これらはそれぞれ標準ライブラリlog2
とlog10
の関数を使用して実装されています。これは高速になります。ただし、これらの機能はプラットフォームによって異なって定義されています。
注:私はCにあまり慣れていないので、ここで間違っている可能性があります。
私はCコードを解釈する立場にいません。しかし、私はこのことから、 'log(x)、log2(x)、log10(x)'は同じCライブラリ戦略を使用するので、同じ速度を持つべきであることを理解しています。そして、 'log(x、n)'は私の質問からの対数式を使っているので遅いです。 – MrT
はい、正しいです。 –
興味深い質問です。私はいくつかの "古い"フィールドテスト(Linux上のCPython 3.6.2、x86_64、i7-3740QM CPU - Pythonインタプリタをコンパイルして、このCPUが有効になっているすべての最適化をコンパイルしました)でした。
>>> math.log10(3)
0.47712125471966244
>>> math.log(3, 10)
0.47712125471966244
>>> timeit.timeit('math.log(3, 10)', setup = 'import math')
0.2496643289923668
>>> timeit.timeit('math.log10(3)', setup = 'import math')
0.14756392200069968
Log10は明らかにlog(n、10)よりも高速です。
>>> math.log2(3.0)
1.584962500721156
>>> math.log(3.0, 2.0)
1.5849625007211563
>>> timeit.timeit('math.log2(3.0)', setup = 'import math')
0.16744944200036116
>>> timeit.timeit('math.log(3.0, 2.0)', setup = 'import math')
0.22228705599263776
Log2もlog(n、2)より明らかに高速です。いずれにせよ、浮動小数点数と整数は等しく高速です。
numpy
とは、画像が異なります。一種のあなたが何をするかは重要ではありません:
>>> timeit.timeit('numpy.log(numpy.arange(1, 10))', setup = 'import numpy')
2.725074506000965
>>> timeit.timeit('numpy.log10(numpy.arange(1, 10))', setup = 'import numpy')
2.613872367001022
>>> timeit.timeit('numpy.log2(numpy.arange(1, 10))', setup = 'import numpy')
2.58251854799164
- 1. ページ上のHTMLの量は速度に影響しますか?
- 2. ファイルサイズはvbaの実行速度に影響しますか?
- 3. ポップオーバーの回数はページの読み込み速度に影響しますか?
- 4. 大きなXMLファイルは速度に影響しますか?
- 5. 基礎グリッドシステムは、私のdiv要素には影響しないのはなぜ基礎グリッドシステムは効果
- 6. Cの静的ローカル変数は実行速度に影響しますか?
- 7. reduceByKeyのnumPartitionsは速度に影響しません
- 8. コードのダウンロード速度への影響
- 9. DLLの実行速度への影響
- 10. Springは、基礎となるデータベースの影響を受けていますか?
- 11. アプリケーションサイズは起動速度とメモリサイズに影響します
- 12. where節の条件の順序はクエリの速度に影響しますか?
- 13. ワークアイテムの計算への影響
- 14. MQTTブローカの位置はメッセージの配信速度に影響しますか?
- 15. ウェブサイトの速度を計算します。
- 16. Twilio:市外局番はSMSの配信速度に影響しますか?
- 17. ネイティブコールが多すぎると速度に影響しません
- 18. Pythonの対数計算
- 19. 角度に基づいて加速度を計算する
- 20. Android加速度計の角度計算
- 21. Pythonのsqlite3モジュールのtimeoutパラメータは、通常のトランザクションの速度に影響しますか?
- 22. オンフリンジイベントの速度の計算
- 23. 速度計算アルゴリズム
- 24. 速度と角度に基づいたベクトル計算
- 25. スプリント速度の計算
- 26. 計算されたプロパティの基礎となる変数| Swift
- 27. python計算高さ角度と元の速度の距離
- 28. IOS iphone加速度計の重力の影響を取り除く
- 29. Androidカメラはセンサー(加速度計と磁場)に影響します。電話機ユーザーの場合
- 30. SQLクエリーの速度にwhere句の順序の影響
[Pythonの数学関数はどこで調べることができますか?](https://stackoverflow.com/questions/5476189/where-can-i-inspect-pythons-math-functions) –
numpyを使用していますか?または別のライブラリですか?ベクトル/ベクトル化されたメソッドを使用する関数ですか? – Jon
自分でベンチマークをやろうとすることもできますが、コードによっては違いがあっても他の種類のオーバーヘッドによって大きく覆い隠される可能性があります。 – jdehesa