来自两个数组的最小二乘最佳拟合线的斜率 m



给定两个文本文件和"x"和"y"作为数组,编写一个子例程,该子例程将给出斜率"m"并截取最小二乘最佳拟合线的"b"。

x = 1,2,3,4

y = 5,6,7,8

m = ((sum(xy(-sum(x(ybar(/((sumx^2(-(sum(x(xbar((

b = ybar - m(xbar(。

Xbar 和 Ybar 是 X 和 Y 数组的平均值。

我的导师说我们不能使用np.loadtxt之外的内在python函数。

我试图找到一种更有效的方法来做到这一点,而不是定义 4 个数组组合,然后定义 4 个组合中每个组合的总和,然后找到 m。

我试图将数组组合的每个总和定义为嵌套循环。

import numpy as np
x = np.loadtxt("C:/Users/Bob/Documents/School/Comp Phys/xlsf.dat")
y = np.loadtxt("C:/Users/Bob/Documents/School/Comp Phys/ylsf.dat")
xbar = np.mean(x)
ybar = np.mean(y)
nx = len(x)
ny = len(y)
q = print(xbar)
sum1=[[0 for i in range(nx)] for j in range(ny)]
for i in range (0, nx):
for j in range (0, ny):
sum1[i][j] = x[i] * y[j]
for i in range (ny):
for j in range (nx):
((sum1[i][j]))
sum2=[[0 for q in range(nx)] for r in range(ybar)]
for q in range (0, nx):
for r in range (0, ybar):
sum2[q][r] = x[q] * ybar[r]
for q in range (ybar):
for r in range (nx):
((sum2[q][r]))

Python 正在赶上 sum2 部分,出现以下错误:

sum2=[[0 for q in range(nx(] for r in range(ybar(]

TypeError: 'numpy.float64' 对象不能解释为整数。

xbar = np.mean(x)
ybar = np.mean(y)

在你的代码中,xbar 和 ybar 是数组的平均值,以浮点数的形式给出(numpy 类型 float 64(。

在下面的行中,您使用 range(ybar( 作为 for 循环。

sum2=[[0 for q in range(nx)] for r in range(ybar)]
for q in range (0, nx):
for r in range (0, ybar):
sum2[q][r] = x[q] * ybar[r]
for q in range (ybar):
for r in range (nx):
((sum2[q][r]))

但是,您的 for 循环不能使用非整数进行循环,因为它们不能循环,例如 4.5 次。您可能需要构建代码以不同的方式计算总和,例如使用不同的变量作为循环范围。

我仍然不确定您要执行哪些计算,但是我已经构建了以下代码,您可以完成这些代码。它很简单,并且按原样执行每个步骤,让您优化代码本身以更好地运行,但希望它能让您了解如何构建计算。

# sum1 array, x*y
sum1=[[0 for i in range(nx)] for j in range(ny)]
for i in range (0, nx):
for j in range (0, ny):
sum1[i][j] = x[i] * y[j]
# sum2 array, x
# notice that the array sum2 can just be completely replaced by x[]
sum2=[[0 for q in range(nx)] for r in range(ny)]
for q in range (0, nx):
sum2[q][0] = x[q] 
# sum3 array, x^2
# same for sum3, we can just replace it with x[]*x[]
sum3 = [[0 for q in range(nx)] for r in range(ny)]
for q in range (0, nx):
sum2[q][0] = x[q]*x[q]
term1 = 0
term2 = 0
term3 = 0
term4 = 0
# sum each 'sum array' and apply them to the term variables
for i in range(nx):
for j in range(ny):
term1 += sum1
term2 += sum2
term3 += sum3
term4 += sum2
term2 = term2 * ybar // we multiply that sum by the coefficients 
term4 = term4 * xbar
m = (term1 - term2 ) / (term3 - term4 ) // calculate m
b = ybar - m * xbar // calculate b

最新更新