在Numpy中快速计算大量数据集的标准差的方法

3 投票
2 回答
10749 浏览
提问于 2025-04-16 15:35

有什么最快的方法来做到这一点呢?

问题

这个方法生成的结果我觉得是正确的,但当N等于10000000的时候,速度实在是太慢了。我想我需要保留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 个回答

1

根据这个维基页面上关于方差的公式,你可以在一个循环中计算方差,而不需要保存随机数的列表(前提是你在其他地方不需要这些随机数)。

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

撰写回答