我试过解决这个问题,但我做不到。我在金融学中尝试确定标准差,我的意思是:
Pr = Prob are equal [0.3, 0.4, 0.3]
r = Return are equal [0.10 ,0.05, 0.30]所以,首先我计算我的平均值
E(r) = 0.10*0.3 + 0.4*0.05 + 0.3*0.3 = 0.14第二,计算我的方差:
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,但这不是答案。
发布于 2018-05-01 06:16:55
你的问题是试图计算均值、方差和标准差,作为某种形式的运行总数,所有这些都是同时计算的。您不能使用这里使用的那些特定公式来实现此目的。正如你手工展示的,你首先计算均值,只有在你得到全部均值之后,你才计算方差,然后只有在得到方差之后,你才计算标准差。你不能仅仅将方差公式应用于均值的一部分,然后希望事情能正常进行。
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循环之外。如果您想要计算平均值、方差和标准差的运行估计值,则必须使用不同的公式。
发布于 2018-07-31 11:26:25
对于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))https://stackoverflow.com/questions/50108800
复制相似问题