重心算法公式验证
1、计算公式
根据百度百科得到的公式如下所示:
2、公式验证
通过python编写公式,测试一维数字阵列,测试结果如下所示,基本可以验证重心算法的计算结果基本吻合。
请输入数字阵列:0 1 2 3 4 5 6 5 4 3 2 1 0
(0x1+1x2+2x3+3x4+4x5+5x6+6x7+5x8+4x9+3x10+2x11+1x12+0x13)/(0+1+2+3+4+5+6+5+4+3+2+1+0) = 252.0/36.0=7.0
请输入数字阵列:3 4 5 6 7 6 5 4 3
(3x1+4x2+5x3+6x4+7x5+6x6+5x7+4x8+3x9)/(3+4+5+6+7+6+5+4+3) = 215.0/43.0=5.0
请输入数字阵列:22 33 44 33 22
(22x1+33x2+44x3+33x4+22x5)/(22+33+44+33+22) = 462.0/154.0=3.0
请输入数字阵列:2 3 44 66 77 55 33 22
(2x1+3x2+44x3+66x4+77x5+55x6+33x7+22x8)/(2+3+44+66+77+55+33+22) = 1526.0/302.0=5.052980132450331
3、测试源码
arr_data = input("请输入数字阵列:")
while arr_data != "":
dec = arr_data.replace(" ", '')
if dec.isdigit():
dec = arr_data.split(" ")
data_dividend = 0.0
data_divisor = 0.0
num = 0
str_dividend = ''
str_divsior = ''
for i in range(len(dec)):
if dec[i] == "":
break
if i>0:
str_dividend = str_dividend + "+"
str_divsior = str_divsior + "+"
num += 1
data_dividend = int(dec[i])*(i+1) + data_dividend
data_divisor = int(dec[i]) + data_divisor
str_dividend = str_dividend + str(dec[i]) + "x" + str(i + 1)
str_divsior = str_divsior + str(dec[i])
if num == len(dec):
str_formula = "(" + str_dividend + ")" + "/" + "(" +str_divsior + ")"
result_over = data_dividend/data_divisor
print(str_formula + " = " + str(data_dividend) + "/" + str(data_divisor) + "=" + str(result_over))
arr_data = input("请输入数字阵列:")
else :
arr_data = input("包含多余的空格,请重新输入数字阵列:")
else:
arr_data = input("输入错误!请输入数字阵列:")