問題タブ [numpy-random]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - forループなしで一連の座標の周りに乱数を生成する
私は一連の座標平均 (3D) と一連の標準偏差 (3D) を次のように付随させています。
問題はN×3
np.random.normal() を使用して、1000 個の座標サンプル セット (N x 3 x 1000) をランダムに生成しようとしています。現在、for ループを使用してサンプルを生成しています。
しかし、私はforループを失い、numpyにそれをより速く実行させ、1回の呼び出しでそれをコーディングする方法を知っている人はいますか?
python - numpy 配列にノイズを追加する最速の方法
画像を表す numpy.ndarray があり、それにランダム ノイズを追加したいと考えています。私はいくつかのテストを行いましたが、これまでのところ最速の解決策は次のとおりです。
しかし、大きな画像/配列がある場合、このソリューションはまだ遅すぎます。それを行う最も速い方法は何ですか?
python - numpy の np.random.RandomState と Python の random.Random との間で変換していますか?
Python の標準の Random と numpy の np.random.RandomState の間で相互に変換できるようにしたいと考えています。これらはどちらも Mersenne Twister アルゴリズムを使用しているため、可能であるはずです (このアルゴリズムの異なるバージョンを使用していない限り)。
これらのオブジェクトの getstate/setstate メソッドと get_state/set_state メソッドを調べ始めました。しかし、それらの詳細を変換する方法がわかりません。
私が見る各状態を調べる:
最初の状態は、サイズ 5 のタプルで、len(state1[1]) = 624
.
2 番目の状態は、サイズ 3 のタプルですlen(state2[1]) = 625
。state2 の最後の項目は実際には state1 の 624 のようです。これは、配列が実際には同じサイズであることを意味します。ここまでは順調ですね。これらは合理的に互換性があるようです。
残念ながら、内部の数値には明らかな対応がないため、シード 0 は異なる状態にrng1.rand() = .548
なりrng2.random() = .844
ます。そのため、アルゴリズムは少し異なるようです。
ただし、完全に一致する必要はありません。最初の rng の状態に影響を与えることなく、決定論的に 1 つの rng の状態を別の rng から設定できる必要があります。
理想的には、ランダム メソッドを呼び出さずに最初の状態を使用して 2 番目の状態を設定し、次に 2 番目の状態を使用して最初の状態を設定すると、最初の状態は変更されませんが、これは必須ではありません。 .
現在、両方の rng から抽出できる 624 の長さのリストを交換するだけのハッキングされた方法があります。ただし、このアプローチに問題があるかどうかはわかりません。この件についてもっと詳しい人は誰でも光を当てることができますか?
これが私のアプローチですが、それが正しく機能するかどうかはわかりません。
編集:
いくつかの調査を行って、ランダム関数への 10 回の呼び出しで状態がどうなるかを確認しました。
各タプルの最初の項目は、使用しているアルゴリズムのバージョンにすぎないと思います。
624 の整数が変化していないように見えるのは興味深いことです。これは常に当てはまりますか?
ただし、Python バージョンで最後の None が何を意味し、最後の 2 つの数字が numpy バージョンで何を意味するのかはまだわかりません。
python - maxtasksperchild、numpy.random.randint、および numpy.random.seed でマルチプロセッシングを使用すると、この小さなスニペットがハングするのはなぜですか?
ランダムな方法でnumpy配列と画像を同時に処理するpythonスクリプトがあります。生成されたプロセス内で適切なランダム性を持たせるために、メイン プロセスからワーカーにランダム シードを渡して、シードを与えます。
を使用するmaxtasksperchild
と、何度もPool
実行した後にスクリプトがハングしますPool.map
。
以下は、問題を再現する最小限のスニペットです。
これが出力です
その後、無期限にハングします。
私は潜在的にnumpy.random
pythonのものに置き換えrandom
て、問題を解決することができました。しかし、私の実際のアプリケーションでは、ワーカーは (ワーカーへの引数として与えられた) ユーザー コードを実行しますが、これは制御できずnumpy.random
、そのユーザー コードで関数を使用できるようにしたいと考えています。そのため、意図的にグローバルランダムジェネレーターをシードしたいと考えています(各プロセスに対して個別に)。
これは、Python 2.7.10、numpy 1.11.0、1.12.0 & 1.13.0、Ubuntu、OSX でテスト済みです。
python - Python での計算の再現性を確保するための乱数発生器の防弾シード
私の意図は、Python で再現可能な計算を行う方法に関するガイドラインを作成することです (可能であれば、環境、オペレーティング システムなどに関係なく)。しかし、乱数を生成する問題が頭に浮かびます。防弾の方法を見つけるのに苦労しています(ある場合)。
乱数発生器の出力を再現可能にする標準的な方法は、使用することです
私の知る限り、シードの自動選択はシステムに依存しています。( Python でのrandom.seedのドキュメントを参照してください。)
したがって、より良い方法は、特定の数値を使用してジェネレーターをシードすることです。
ただし、組み込みの random を使用せずに を使用するライブラリがありますnumpy.random
。numpy
したがって、シードのジェネレーターも必要です。
組み込みrandom
はシングルトンとしてnumpy.random
機能し、同じように機能すると思います。これは、シードを一度設定すると、それがどこでも使用されることを意味します。
コードの冒頭で使用でき、ランダム ジェネレーターに関して計算上の再現性を保証するコード スニペットを作成したいと思います。
両方のジェネレーターを組み合わせて両方のシードを設定し、さらにはオペレーティング システム間で再現性を維持するよりも良い方法はありますか? また、スニペットを可能な限り一般的なものにするために、組み込みの乱数ジェネレーターと numpy 乱数ジェネレーターに追加する必要がある、広く使用されている疑似乱数ジェネレーターに精通していますか?