Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将原始值与已计算最小二乘的值进行比较_Python_Python 3.x_Numpy_Scipy - Fatal编程技术网

Python 将原始值与已计算最小二乘的值进行比较

Python 将原始值与已计算最小二乘的值进行比较,python,python-3.x,numpy,scipy,Python,Python 3.x,Numpy,Scipy,我目前已经在点中创建了一个3x3点网格,这些点在读数中有一个z值,这些读数基于阵列中的位置进行关联 在我计算了最小二乘法之后,我想比较由最小二乘法计算的最佳拟合平面的z值与原始读数之间的差值,但仅在相同的位置。我有什么办法可以做到这一点吗 import numpy as np # import scipy.linalg from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt READINGS = [10.6

我目前已经在
点中创建了一个3x3点网格,这些点在
读数中有一个z值,这些读数基于阵列中的位置进行关联

在我计算了最小二乘法之后,我想比较由最小二乘法计算的最佳拟合平面的z值与原始读数之间的差值,但仅在相同的位置。我有什么办法可以做到这一点吗

import numpy as np
# import scipy.linalg
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

READINGS = [10.668, 10.398, 9.829, 10.114, 10.608, 10.793, 11.127, 11.034, 10.691]

z = READINGS
x = [None] * 9
y = [None] * 9
POINTS = [[-19, 208], [121, 208], [261, 208],
              [261, 148], [121, 148], [-19, 148],
              [-19, 58], [121, 58], [261, 58]]

for i in range(0, 9):
    x[i] = POINTS[i][0]
    y[i] = POINTS[i][1]

data = np.c_[x, y, z]
mn = np.min(data, axis=0)
mx = np.max(data, axis=0)

X, Y = np.meshgrid(np.linspace(mn[0], mx[0], 20), np.linspace(mn[1], mx[1], 20))
XX = X.flatten()
YY = Y.flatten()
# best-fit linear plane (1st-order)
A = np.c_[data[:, 0], data[:, 1], np.ones(data.shape[0])]
C, _, _, _ = np.linalg.lstsq(A, data[:, 2], rcond=None)  # coefficients
# evaluate it on grid
Z = C[0] * X + C[1] * Y + C[2]


如果我理解你的意思:
diff=A.dot(C)-data[:,2]
。其中
A.dot(C)
表示估计的Z值,使用简单的矩阵乘法。@obchardon-Perfect!非常感谢。注意到
Z=C[0]*np.array(x)+C[1]*np.array(y)+C[2]
将产生相同的结果,但由于我们试图求解一个
A*x=b
线性方程组,因此最好使用
A.dot(x)
来计算b。