首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建具有多个向量的用户定义函数,并获得均值和方差。

创建具有多个向量的用户定义函数,并获得均值和方差。
EN

Stack Overflow用户
提问于 2019-04-14 03:09:55
回答 1查看 195关注 0票数 0

我试图定义Python函数-获得给定多个向量的均值和方差。只有x轴和y轴.

我尝试了一些函数并创建了代码,但它只是显示了一个不正确的值。

下面是我的密码。

代码语言:javascript
复制
def avr(*inn):
    hap = 0
    cnt = 0
    for i in inn:
        hap += i
        cnt += 1
    avrr = hap/cnt

    return avrr

def varr(*inn):
    jejob = 0
    jegobhap = 0
    cnt = 0
    for i in inn:
        cha = (i-avr(*inn))
        jegob = cha**2
        jegobhap += jegob
        cnt += 1
    varr_m = jegobhap/cnt

    return varr_m

def mean_and_var(*val):
    x_axis_avr = avr(*val[0])
    y_axis_avr = avr(*val[1])
    x_axis_boon = varr(*val[0])
    y_axis_boon = varr(*val[1])

    return ((x_axis_avr,y_axis_avr),(x_axis_boon,y_axis_boon))

v1=(0,1)
v2=(0.5, 0.5)
v3=(1,0)
v4=(50,30)

m, var = mean_and_var(v1,v2,v3,v4)
print("mean: ", m, "var: " , var)

它给了我

代码语言:javascript
复制
mean: (0.5, 0.5) var: (0.25, 0.0)

正确的价值应该是;

代码语言:javascript
复制
mean (12.875, 7.875) var: (459.546875,163.296875)

错误是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-14 03:28:29

我想你对Python期望太高了。

var[0]给出了第一个向量(0,1),而不是所有向量(0, 0.5, 1, 50)的第一个值。

var[1]给出第二个向量(0.5, 0.5),而不是所有向量(1, 0.5, 0, 30)的第二个值。

而且它不使用值v3, v4

试试这个,你就能得到预期的值。

代码语言:javascript
复制
v1 = (0, 0.5, 1, 50)
v2 = (1, 0.5, 0, 30)

m, var = mean_and_var(v1, v2)
print("mean: ", m, "var: " , var)

编辑:使用numpy您可以这样做

(我删除了变量之前的所有* )

代码语言:javascript
复制
def avr(inn): # * removed
    #print('avr:', inn)

    hap = 0
    cnt = 0
    for i in inn:
        hap += i
        cnt += 1
    avrr = hap/cnt

    return avrr

def varr(inn): # * removed
    #print('varr:', inn)

    jejob = 0
    jegobhap = 0
    cnt = 0
    for i in inn:
        cha = (i-avr(inn)) # * removed
        jegob = cha**2
        jegobhap += jegob
        cnt += 1
    varr_m = jegobhap/cnt

    return varr_m

def mean_and_var(val):
    x_axis_avr = avr(val[:,0]) # * removed
    y_axis_avr = avr(val[:,1]) # * removed
    x_axis_boon = varr(val[:,0]) # * removed
    y_axis_boon = varr(val[:,1]) # * removed

    return (x_axis_avr, y_axis_avr), (x_axis_boon, y_axis_boon)

import numpy as np

v1 = (0, 1)
v2 = (0.5, 0.5)
v3 = (1, 0)
v4 = (50, 30)

matrix = np.array([v1,v2,v3,v4])
#print(matrix)

m, var = mean_and_var(matrix)
print("mean: ", m, "var: " , var)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55671647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档