[解決済み] Pythonのnumpy.randomとrandom.randomの相違点
質問
Pythonで大きなスクリプトを作っています。私は他の人のコードで自分自身を鼓舞したので、私は最終的に
numpy.random
モジュールを使うことにしました(たとえば二項分布からとった乱数の配列を作るため)。
random.random
.
どなたか、この2つの大きな違いを教えていただけませんか?
それぞれのdocのWebページを見てみると、以下のように思えます。
numpy.random
の方がメソッドが多いだけのように思えますが、乱数の生成がどう違うのかが不明です。
なぜ私が質問しているかというと、デバッグのためにメインプログラムに種を蒔く必要があるからです。しかし、私がインポートしているすべてのモジュールで同じ乱数生成器を使用しなければ動作しませんが、これは正しいですか?
また、私はここで、別の投稿で、使用しないことについての議論を読みました。
numpy.random.seed()
を使用しないという議論を読みましたが、なぜこれがそんなに悪い考えなのかよく分かりませんでした。私は本当に誰かがこれがそうである理由を私に説明する場合、感謝します。
どのように解決するのですか?
あなたはすでに多くの正しい観察をしていますね。
両方のランダム ジェネレータにシードを入れたいのでなければ、長い目で見れば、どちらか一方のジェネレータを選択する方が簡単でしょう。しかし、両方を使用する必要がある場合、乱数は互いに独立して生成されるため、両方にシードを設定する必要があります。
のために
numpy.random.seed()
の場合、主な問題はスレッドセーフでないことです - つまり、もしあなたが
多くの異なるスレッドが実行されている場合
なぜなら、2つの異なるスレッドが同時にこの関数を実行した場合、動作が保証されないからです。スレッドを使用しておらず、将来的にこの方法でプログラムを書き直す必要がないことが合理的に予想できる場合。
numpy.random.seed()
で問題ないでしょう。 将来的にスレッドが必要になると思われる理由がある場合は、 提案されたとおりにした方が長い目で見ればずっと安全です。
のローカルインスタンスを作成します。
numpy.random.Random
クラスのローカルインスタンスを作成します。
. 私が知る限りでは
random.random.seed()
はスレッドセーフです(少なくとも、私はそれに反する証拠を見つけられませんでした)。
は
numpy.random
ライブラリには、科学的研究でよく使われる確率分布と、ランダムなデータの配列を生成するための便利な関数がいくつか含まれています。このライブラリは
random.random
ライブラリはもう少し軽量で、科学的研究や統計の他の種類の仕事をしないのであれば、問題ないでしょう。
それ以外の場合は、どちらも メルセンヌ・ツイスター数列 を使って乱数を生成していますが、どちらも完全に決定論的です。つまり、いくつかの重要な情報を知っていれば、絶対的な確実性を持って予測することが可能なのです。 どの数字が次に来るか . この理由から、numpy.randomもrandom.randomも、どのような用途にも適していません。 深刻な暗号の使用 . しかし、乱数列はとてもとても長いので、人々があなたのデータをリバースエンジニアリングしようとすることを心配しない場合には、どちらも乱数を生成するのに適しています。これは、乱数値に種を蒔く必要がある理由でもあります。毎回同じ場所から開始すると、常に同じ乱数列が得られます!
余談ですが、もしあなたが を行う で暗号レベルのランダム性が必要な場合は 秘密 モジュールか、あるいは 暗号化.ランダム のようなもので、Python 3.6より前のバージョンを使っている場合は、このモジュールが使われます。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] numpy.random.seed(0)は何をするのですか?
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] バブルソートの宿題
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Django filter queryset __in for *every* item in list