Python中循环的累计和和和标准偏差

2024-05-15 12:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过解决这个问题,但我做不到。 我在尝试确定金融学中的标准差,我的意思是:

Pr = Prob are equal [0.3, 0.4, 0.3]
r = Return are equal [0.10 ,0.05, 0.30]

所以,首先我计算我的平均值

^{pr2}$

其次,计算我的方差:

Var = 0.3*(0.1-0.14)^2 + 0.4*(0.05-0.14)^2 + 0.3*(0.3 - 0.14)^2 = 0.0114

第三,我的标准差是

Var^(1/2) = 0.10677078 rounded  to 0.10677

在Python中,我尝试过使用基本的arhitmetic来解决问题,但我做不到。 我的代码是:

import math
def dev_stan(prob, ret):
    Pro = 0
    Des_Stan = 0
    Var = 0

    for i in range(len(ret)):
         Pro += prob[i]*ret[i]
         Var += (ret[i] - Pro)**2*prob[i]  
         Des_Stan = (math.sqrt(Var))
    return Des_Stan, Var, Pro, ret, prob

x = [0.30,0.4,0.30] 
y = [0.10,0.05,0.30]
print(dev_stan(x,y))

这段代码的结果是:0.0956556,但这不是答案。在


Tags: 代码devvarmathprequalarepro
2条回答

你的问题是试图计算平均值、方差和标准差,作为某种运行的总和,所有这些都是同时计算的。你不能用你在这里使用的那些特定的公式。正如你用手展示的,你先计算平均值,只有在你得到全部平均值之后,你才计算方差,然后在得到方差之后,你才计算标准差。你不能仅仅把方差公式应用到一个平均值上,然后希望事情会好起来。在

import math
def dev_stan(prob, ret):
    Pro = 0
    Des_Stan = 0
    Var = 0

    for i in range(len(ret)):
        Pro += prob[i]*ret[i]
    for i in range(len(ret)):
        Var += (ret[i] - Pro)**2*prob[i]  
    Des_Stan = (math.sqrt(Var))
return Des_Stan, Var, Pro, ret, prob

应该行得通。请注意,最后一个Des_Stan必须在for循环之外。如果你想计算平均值、方差和标准差的连续估计值,你必须使用不同的公式。在

对于python中的数学计算,Numpy就是您想要的。在

import numpy as np

def dev_stan(x, y):
    mean = x.dot(y)
    var = np.sum(x * (y - mean) ** 2)    
    std = np.sqrt(var)
    return mean, var, std, x, y

x = np.array([0.30,0.4,0.30])
y = np.array([0.10,0.05,0.30])
print(dev_stan(x,y))

相关问题 更多 >