3

これを行うための最良の(最速の)方法は何ですか?

質問

これは私が正しいと信じているものを生成しますが、明らかに N = 10e6 では非常に遅いです。標準偏差を正しく計算できるように Xi 値を保持する必要があると思いますが、これをより速く実行するためのテクニックはありますか?

def randomInterval(a,b):
    r = ((b-a)*float(random.random(1)) + a)
    return r 

N = 10e6
Sum = 0
x = []
for sample in range(0,int(N)):
    n = randomInterval(-5.,5.)
    while n == 5.0:
        n = randomInterval(-5.,5.) # since X is [-5,5)
    Sum += n
    x = np.append(x, n)

A = Sum/N

for sample in range(0,int(N)):
    summation = (x[sample] - A)**2.0

standard_deviation = np.sqrt((1./N)*summation)
4

2 に答える 2

3

あなたはまともな試みをしましたが、これを理解していることを確認し、これはハードウェアであるため明示的にコピーしないでください

import numpy as np
N = int(1e6)
a = np.random.uniform(-5,5,size=(N,))
standard_deviation = np.std(a)

これは、numpy のようなパッケージを使用できることを前提としています (そのようにタグ付けしました)。可能であれば、データの配列を作成して操作を実行できるようにするメソッドが多数あるため、明示的なループを回避できます (内部で効率的に行われます)。ドキュメントを見て、利用可能な機能とその使用方法を確認することをお勧めします。

http://docs.scipy.org/doc/numpy/reference/index.html

于 2011-04-12T19:28:16.637 に答える
1

このWikiページにあるVarianceの式を使用すると、乱数のリストを保存せずに1つのループで計算できます(他の場所で必要がないと仮定した場合)。

于 2011-04-12T19:55:22.897 に答える