Методы быстрого расчета стандартного отклонения большого числа установлены в Numpy - PullRequest
2 голосов
/ 12 апреля 2011

Какой самый лучший (самый быстрый) способ сделать это?

question

Это дает то, что я считаю правильным ответом, но, очевидно, при 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)

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Вы сделали приличную попытку, но должны убедиться, что вы понимаете это и не копируете явно, так как это HW

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

1 голос
/ 12 апреля 2011

Используя формулы на этой вики-странице для Variance , вы можете вычислить его за один цикл, не сохраняя список случайных чисел (при условии, что они вам больше не нужны).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...