Pythonでランダム配列の生成を高速化する方法

彼らはいた

モンテカルロ積分法を使用して、n球の体積を見つけ、それを分析結果と比較したいと思います。これを10 ^ 6ポイントと10 ^ 9ポイントで実行したいのですが、10 ^ 6ポイントでは多少機能しますが(n = 2(円)、n = 3(球)、n = 12の場合は約1分かかります)、 10 ^ 9ポイントはひどく遅いです。

MCメソッドの簡単な説明:半径r = 1のn球の体積を見つけるために、n球を完全に含む簡単に知られている体積(たとえば、辺の長さが2 * rのn立方体)を想像します。次に、n立方体の一様分布点からサンプリングし、その点が球内にあるかどうかを確認します。そのように生成されたn球内のすべての点を数えます。V_sphere / V_cubeの比率は、N_inside / N_totalとして概算できるため、V_sphere = V_cube * N_inside / N_total

関数は次のとおりです。

def hyp_sphere_mc(d,samples):    

    inside = 0                     #number of points inside sphere                                             
    sum = 0                        #sum of squared components

    for j in range(0,samples):        

        x2 = np.random.uniform(0,1,d)**2     #generate random point in d-dimensions                           
        sum = np.sum(x2)                     #sum its components

        if(sum < 1.0):                                              
            inside += 1                      #count points inside sphere

    V = ((2)**d)*(float(inside)/samples)     #V = V_cube * N_inside/N_total           

    V_true = float(math.pi**(float(d)/2))/math.gamma(float(d)/2 + 1) #analytical result 

    ERR = (float(abs(V_true-V))/V_true)*100        #relative Error

    print "Numerical:", V, "\t" , "Exact: ", V_true, "\t", "Error: ", ERR

問題は、反復ごとに新しいランダム配列を生成することであり、特に10 ^ 9回の反復がある場合、これには多くの時間がかかります。これをスピードアップする方法はありますか?

ビット単位

ループを次のように置き換えることができます。

inside = np.sum(np.sum(np.random.rand(samples,d)**2,1)<1)

numpyを使用するときは、ループを回避するようにしてください。アイデアは、行列内のすべてのサンプルを一度に生成し、その後のすべての操作をベクトル化できるということです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SQLServerでのランダム選択を高速化する方法

分類Dev

Pythonでnumpy配列の製品を高速化する方法

分類Dev

ブックダウンの生成を高速化する方法は?

分類Dev

日時のパンダでラムダを使用して適用メソッドを高速化する方法

分類Dev

「移動する」球内の複数の配列間でデータを検索するコードのランタイムを高速化する方法

分類Dev

パンダの文字列機能を高速化する方法は?

分類Dev

Pythonの2D配列で2D配列を高速化する方法は?

分類Dev

Python-配列を数えることでコサイン類似度を高速化する方法

分類Dev

numpy配列の関数を高速化する方法

分類Dev

私のPythonコード、パンダライブラリを高速化する方法

分類Dev

Cython(またはNumpy)でパンダを高速化する方法

分類Dev

Google Apps Scriptのランタイムを高速化する方法は?

分類Dev

行列計算ランタイムのsympy行列を高速化する方法

分類Dev

Python-別のnumpy配列計算からnumpy配列を作成するforループを高速化する方法

分類Dev

verilogでビット配列の配列をランダム化する方法は?

分類Dev

プログラムの実行を高速化する方法

分類Dev

PythonでFuzzyWuzzyを使用してアイテムの説明のマッチングを高速化する方法

分類Dev

Pythonで新しいランダムポアソン配列を生成するためのループを最適化する方法は?

分類Dev

サムスンのラップトップでWindows8を高速化する方法は?

分類Dev

配列/行列の反復処理を高速化する方法は?パンダとnumpy配列の両方を試しました

分類Dev

Pythonで集合のdictの共通部分を高速化する方法

分類Dev

Pythonで複数の内積を高速化する方法

分類Dev

Pythonでこのタスクを高速化する方法

分類Dev

Pythonで一意のランダムバイナリ配列を生成する

分類Dev

numpy配列/データフレームの反復プロセスを高速化する方法

分類Dev

素数を検証するPythonプログラムを高速化する方法は?

分類Dev

Cで2D配列をランダム化する方法

分類Dev

PHPで配列をランダム化する方法

分類Dev

(Python)ラムダ行の適用を高速化するのに役立ちます

Related 関連記事

  1. 1

    SQLServerでのランダム選択を高速化する方法

  2. 2

    Pythonでnumpy配列の製品を高速化する方法

  3. 3

    ブックダウンの生成を高速化する方法は?

  4. 4

    日時のパンダでラムダを使用して適用メソッドを高速化する方法

  5. 5

    「移動する」球内の複数の配列間でデータを検索するコードのランタイムを高速化する方法

  6. 6

    パンダの文字列機能を高速化する方法は?

  7. 7

    Pythonの2D配列で2D配列を高速化する方法は?

  8. 8

    Python-配列を数えることでコサイン類似度を高速化する方法

  9. 9

    numpy配列の関数を高速化する方法

  10. 10

    私のPythonコード、パンダライブラリを高速化する方法

  11. 11

    Cython(またはNumpy)でパンダを高速化する方法

  12. 12

    Google Apps Scriptのランタイムを高速化する方法は?

  13. 13

    行列計算ランタイムのsympy行列を高速化する方法

  14. 14

    Python-別のnumpy配列計算からnumpy配列を作成するforループを高速化する方法

  15. 15

    verilogでビット配列の配列をランダム化する方法は?

  16. 16

    プログラムの実行を高速化する方法

  17. 17

    PythonでFuzzyWuzzyを使用してアイテムの説明のマッチングを高速化する方法

  18. 18

    Pythonで新しいランダムポアソン配列を生成するためのループを最適化する方法は?

  19. 19

    サムスンのラップトップでWindows8を高速化する方法は?

  20. 20

    配列/行列の反復処理を高速化する方法は?パンダとnumpy配列の両方を試しました

  21. 21

    Pythonで集合のdictの共通部分を高速化する方法

  22. 22

    Pythonで複数の内積を高速化する方法

  23. 23

    Pythonでこのタスクを高速化する方法

  24. 24

    Pythonで一意のランダムバイナリ配列を生成する

  25. 25

    numpy配列/データフレームの反復プロセスを高速化する方法

  26. 26

    素数を検証するPythonプログラムを高速化する方法は?

  27. 27

    Cで2D配列をランダム化する方法

  28. 28

    PHPで配列をランダム化する方法

  29. 29

    (Python)ラムダ行の適用を高速化するのに役立ちます

ホットタグ

アーカイブ