列表元素上的代数运算

问题描述 投票:2回答:2

为了学习目的,我正在尝试使用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)
python statistics dice standard-deviation variance
2个回答
0
投票

看起来您只需要在此处获取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(...)


0
投票

您已经有两个列表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十进制数字的整数

© www.soinside.com 2019 - 2024. All rights reserved.