使用多个向量创建用户定义的函数并获取均值和方差
Creates user- defined function with multiple vectors and obtains the mean and variance
我正在尝试定义 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)
错误是什么?
我认为您对 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)
我正在尝试定义 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)
错误是什么?
我认为您对 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)