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公式,您可以在一个循环中计算它,而无需存储随机数列表(假设您在其他地方不需要它们)。

于 2011-04-12T19:55:22.897 回答