Python代码输出精细直到计算

2024-09-30 20:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有一组数据点要做线性回归,大部分大型计算都很顺利

from __future__ import division
data = [[0.0,0.0], [1.0,2.0], [2.0,4.0]]

#regression model
n = float(len(data))
sumx = 0.0
sumy = 0.0
sumxsquared = 0.0
sumxy = 0.0
rcoeff = 0.0
m = 0.0

print (n)

i=0

while (i < n):
  sumx += data[i][0]
  sumxsquared += (data[i][0])**2.0
  sumxy += data[i][0]*data[i][1]
  sumy += data[i][1]
  i += 1

print ("total x: " + str(sumx))
print ("total y: " + str(sumy))
print ("total xy: " + str(sumxy))
print ("total x squared: " + str(sumxsquared))

但是,在我添加以下代码之后,我的'm'读取为零

m = ((sumy*sumxsquared-sumx*sumxy)/((n*sumxsquared)-sumx**2.0))

print ("m:" + str(m))

我正在努力寻找原因,能帮我点忙吗


Tags: 数据fromimportdatafuture线性divisiontotal
2条回答

将0除以6,即0:

a=(sumy*sumxsquared)
b=(sumx*sumxy)
c=(n*sumxsquared)
d=(sumx**2.0)
print(a)
print(b)
print(c)
print(d)
m = (a-b)/(c-d)   
print ("m:" + str(m))

输出:

30.0
30.0
15.0
9.0
m:0.0

你表达式的分子

((sumy*sumxsquared-sumx*sumxy)/((n*sumxsquared)-sumx**2.0))

6*5 - 3*10,也就是30 - 30或零,所以整个分数的计算结果当然是零

请注意,您的数据是由三个点组成的,它们是一条直线((0,0)(1,2)(2,4)),此外,这条直线穿过原点,因此基于这些点的许多统计数据都将为零

相关问题 更多 >