为了学习目的,我正在尝试使用python统计处理数据。
在我的问题中,我产生两次掷骰子n次,其中X是随机变量,定义了两次掷骰的乘积。我设法计算X的期望值,然后计算X的方差,但是在计算X的标准偏差时遇到了问题。
这是我的问题。如何基于两个列表中具有相同序列号的元素的代数运算,从两个列表中获取第三个列表?确切地说,我想得到这样的东西。
x = [x0, x1, .., xi, .., xn]
y = [y0, y1, .., yi, .., yn]
z = [(x0-y0)^2, (x1-y1)^2, .., (xi-yi)^2, .., (xn-yn)^2]
这是我的代码。也许有点笨重,但这是我的第一个。我收到一个错误
unsupported operand type(s) for -: 'list' and 'Decimal
在线
x_error_2 = Decimal (((x_storage) - (expectation_x))**2).quantize(Decimal('.0001'))
显然,我做错了。
n = input ("n=")
sum_x = 0
sum_x_2 = 0
sum_x_error_2 = 0
x_storage = [ ]
expectation_x_storage = []
from decimal import Decimal
for i in range (0, n):
from random import *
x = Decimal ((randint(1, 6)*randint(1, 6))).quantize(Decimal('1'))
x_storage.append(x)
x_2 = Decimal (x**2).quantize(Decimal('.01'))
sum_x = sum_x + x
sum_x_2 = sum_x_2 + x_2
expectation_x = Decimal (sum_x / n).quantize(Decimal('.01'))
expectation_x_2 = Decimal (sum_x_2 / n).quantize(Decimal('.01'))
variance_x = Decimal ((expectation_x_2 - (expectation_x)**2)).quantize(Decimal('.01'))
print ("E(X)=")
print (expectation_x)
print ("V(X)=")
print (variance_x)
for i in range (0, n):
expectation_x_storage.append(expectation_x)
print x_storage
print expectation_x_storage
#code is working until the next line
for i in range (0, n):
x_error_2 = Decimal (((x_storage) - (expectation_x))**2).quantize(Decimal('.0001'))
sum_x_error_2 = sum_x_error_2 + x_error_2
standard_deviation_x_2 = Decimal ((sum_x_error_2)/(n-1)).quantize(Decimal('.01'))
print ("Sn2(X)=")
print (standard_deviation_x_2)
看起来您只需要在此处获取x_storage的第i个元素。
x_error_2 = Decimal (((x_storage[i]) - (expectation_x))**2).quantize(Decimal('.0001'))
也更改行的标识
standard_deviation_x_2 = Decimal ((sum_x_error_2)/(n-1)).quantize(Decimal('.01'))
将其放置在循环之外。不确定是否值得一提,但是在python中,标识至关重要。
然后它应该可以工作。
似乎您正在使用python 2.7?我建议您不要将带括号和不带括号的print
样式混合使用。使用print(...)
。
您已经有两个列表x = [x1,x2,...xn]
和y=[y1,y2,...,yn]
,现在z
应该是z=[(x1-y1)^2,(x2-y2)^2,...,(xn-yn)^2]
您可以这样操作:
>>> a=[35.5,36.6,37.7]
>>> b=[12.34,13.89,30.8]
>>> c=[(a[i]-b[i])**2 for i in range(len(a))]
>>> c
[536.3856, 515.7441, 47.61000000000003]
>>>
如果您舍入这些数字,则可以使用round
功能
>>> c=[round((a[i]-b[i])**2,3) for i in range(len(a))]
>>> c
[536.386, 515.744, 47.61]
>>>
round(x,y)
是x到y十进制数字的整数