Создает пользовательскую функцию с несколькими векторами и получает среднее значение и дисперсию - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь определить функцию Python - получает среднее значение и дисперсию с заданными несколькими векторами.Есть только оси X и Y.

Я попытался сделать некоторые функции и создал код, но он показал мне только неправильное значение.

Ниже мой код.

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)

и это дает мне

mean: (0.5, 0.5) var: (0.25, 0.0)

Правильное значение должно быть;

mean (12.875, 7.875) var: (459.546875,163.296875)

В чем ошибка?

1 Ответ

0 голосов
/ 14 апреля 2019

Я думаю, вы ожидаете слишком много для Python.

var[0] дает первый вектор (0,1), а не первые значения из всех векторов (0, 0.5, 1, 50).

var[1] дает второй вектор (0.5, 0.5), а не вторые значения из всех векторов (1, 0.5, 0, 30)

И он не использует значения v3, v4

Попробуйте это, и вы получите ожидаемые значения

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 вы можете сделать что-то вроде этого

(я удалил все * перед переменными)

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)
...