random.normalvariate()
と random.gauss()
の違いは何ですか?
それらは同じパラメータを取り、同じ値を返し、本質的に同じ機能を実行します。
前の回答 から random.gauss()
は スレッドセーフ ではないことを理解していますが、これはこのコンテキストでどういう意味ですか?なぜプログラマーはこれを気にする必要があるのですか?あるいは、Pythonの「ランダム」にスレッドセーフバージョンと非スレッドセーフバージョンの両方が含まれているのはなぜですか?
これは興味深い質問です。一般に、2つのpython実装の違いを知る最良の方法は、コードを自分で調べる:です。
import inspect, random
str_gauss = inspect.getsource(random.gauss)
str_nv=inspect.getsource(random.normalvariate)
次に、各文字列を印刷して、ソースの違いを確認します。コードをざっと見てみると、マルチスレッドごとに動作が異なるだけでなく、アルゴリズムが同じではないことがわかります。たとえば、normalvariate
は、str_nv
の次のコメントのように、Kinderman and Monahanメソッドと呼ばれるものを使用します。
# Uses Kinderman and Monahan method. Reference: Kinderman,
# A.J. and Monahan, J.F., "Computer generation of random
# variables using the ratio of uniform deviates", ACM Trans
# Math Software, 3, (1977), pp257-260.
これについては完全にはわかりませんが、Pythonドキュメントには、random.gaussの方がわずかに高速であると記載されているため、スレッドセーフでなくても問題がなければ、もう少し速く進むことができます。