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
Arrays 将平面拟合到二维阵列_Arrays_Python 3.x_Regression_Plane - Fatal编程技术网

Arrays 将平面拟合到二维阵列

Arrays 将平面拟合到二维阵列,arrays,python-3.x,regression,plane,Arrays,Python 3.x,Regression,Plane,我有一个拓扑图像,我正试图使用Python对其执行平面减法。该图像是一个256x256二维数组,包含介于0和1之间的float32值 我想做的是使用线性回归将一个平面拟合到这个数据中,然后从原始值中减去这个平面 我不确定如何实现这一目标 我不熟悉Python语言,非常感谢您的帮助。首先,您需要以正确的方式表示数据 您有两个参数X1和X2,用于定义拓扑图像的坐标,还有一个目标值Y,用于定义每个点的高度。对于回归分析,您需要通过添加始终等于1的X0来扩展参数列表 然后,您需要将参数和目标分别展开为矩

我有一个拓扑图像,我正试图使用Python对其执行平面减法。该图像是一个256x256二维数组,包含介于0和1之间的float32值

我想做的是使用线性回归将一个平面拟合到这个数据中,然后从原始值中减去这个平面

我不确定如何实现这一目标


我不熟悉Python语言,非常感谢您的帮助。

首先,您需要以正确的方式表示数据

您有两个参数
X1
X2
,用于定义拓扑图像的坐标,还有一个目标值
Y
,用于定义每个点的高度。对于回归分析,您需要通过添加始终等于1的
X0
来扩展参数列表

然后,您需要将参数和目标分别展开为矩阵
[m*m x 3]
[m*m x 1]
。您需要找到向量θ,它将描述所需的平面。为此,您可以使用法向方程

为了演示该方法,我生成了一些拓扑曲面。您可以在图片上看到曲面、带有拟合平面的曲面和减法后的曲面:

代码如下:

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

m = 256 #size of the matrix

X1, X2 = np.mgrid[:m, :m]

fig = plt.figure()
ax = fig.add_subplot(3,1,1, projection='3d')
jet = plt.get_cmap('jet')

#generation of the surface
F = 3        
i = np.minimum(X1, m-X1-1)
j = np.minimum(X2, m-X2-1)
H = np.exp(-.5*(np.power(i, 2)  +  np.power(j, 2)   )/(F*F))
Y = np.real(  np.fft.ifft2   (H  *  np.fft.fft2(  np.random.randn(m, m))))
a = 0.0005; b = 0.0002; #parameters of the tilted plane
Y = Y + (a*X1 + b*X2); #adding the plane
Y = (Y - np.min(Y)) / (np.max(Y) - np.min(Y)) #data scaling

#plot the initial topological surface
ax.plot_surface(X1,X2,Y, rstride = 1, cstride = 1, cmap = jet, linewidth = 0)


#Regression
X = np.hstack(   ( np.reshape(X1, (m*m, 1)) , np.reshape(X2, (m*m, 1)) ) )
X = np.hstack(   ( np.ones((m*m, 1)) , X ))
YY = np.reshape(Y, (m*m, 1))

theta = np.dot(np.dot( np.linalg.pinv(np.dot(X.transpose(), X)), X.transpose()), YY)

plane = np.reshape(np.dot(X, theta), (m, m));

ax = fig.add_subplot(3,1,2, projection='3d')
ax.plot_surface(X1,X2,plane)
ax.plot_surface(X1,X2,Y, rstride = 1, cstride = 1, cmap = jet, linewidth = 0)


#Subtraction
Y_sub = Y - plane
ax = fig.add_subplot(3,1,3, projection='3d')
ax.plot_surface(X1,X2,Y_sub, rstride = 1, cstride = 1, cmap = jet, linewidth = 0)

plt.show()

这个问题太宽泛了。您需要以特定格式阅读地形图的帮助吗?你需要数学方面的帮助吗?需要重新渲染的帮助吗?您知道如何在语言X中完成所有这些,但需要将其转换为Python吗?请把你的问题分成几个小的、可回答的部分。