-
2020-11-20 19:33:03
我试着把这个x数据:[0.4,0.165,0.165,0.585,0.585],这个y数据:[.45,.22,.63,.22,.63],这个z数据:[1,0.99,0.98,0.97,0.96]拟合成抛物面。我正在使用scipy的曲线拟合工具。这是我的代码:doex = [0.4,0.165,0.165,0.585,0.585]
doey = [.45, .22, .63, .22, .63]
doez = np.array([1, .99, .98,.97,.96])
def paraBolEqn(data,a,b,c,d):
if b < .16 or b > .58 or c < .22 or c >.63:
return 1e6
else:
return ((data[0,:]-b)**2/(a**2)+(data[1,:]-c)**2/(a**2))
data = np.vstack((doex,doey))
zdata = doez
opt.curve_fit(paraBolEqn,data,zdata)
我试着把抛物面放在0.16到.58(x轴)和.22到.63(y轴)之间。如果b或c在这个范围之外,我会返回一个很大的值。在
不幸的是,fit是wayyy off,我的popt值都是1,我的pcov是inf
任何帮助都会很好。在
谢谢你
更多相关内容 -
python实现三维拟合的方法
2021-01-20 06:45:31如下所示: ...#列出实验数据 point=[[2,3,48],[4,5,50],[5,7,51],[8,9,55],[9,12,56]] plt.xlabel(X1) plt.ylabel(X2) #表示矩阵中的值 ISum = 0.0 X1Sum = 0.0 X2Sum = 0.0 X1_2Sum = 0.0 X1X2Sum -
Python三维多项式曲面拟合,顺序依赖
2020-12-16 17:46:08如果你只想把一个2D,3阶多项式拟合到你的数据中,那么就用数据点的all来估计16个系数。import itertoolsimport numpy as npimport matplotlib.pyplot as pltdef main():# Generate Data...numdata...Griddata使用样条曲线拟合。三阶样条曲线和三阶多项式不一样(相反,它在每个点上都是不同的三阶多项式)。
如果你只想把一个2D,3阶多项式拟合到你的数据中,那么就用数据点的all来估计16个系数。import itertools
import numpy as np
import matplotlib.pyplot as plt
def main():
# Generate Data...
numdata = 100
x = np.random.random(numdata)
y = np.random.random(numdata)
z = x**2 + y**2 + 3*x**3 + y + np.random.random(numdata)
# Fit a 3rd order, 2d polynomial
m = polyfit2d(x,y,z)
# Evaluate it on a grid...
nx, ny = 20, 20
xx, yy = np.meshgrid(np.linspace(x.min(), x.max(), nx),
np.linspace(y.min(), y.max(), ny))
zz = polyval2d(xx, yy, m)
# Plot
plt.imshow(zz, extent=(x.min(), y.max(), x.max(), y.min()))
plt.scatter(x, y, c=z)
plt.show()
def polyfit2d(x, y, z, order=3):
ncols = (order + 1)**2
G = np.zeros((x.size, ncols))
ij = itertools.product(range(order+1), range(order+1))
for k, (i,j) in enumerate(ij):
G[:,k] = x**i * y**j
m, _, _, _ = np.linalg.lstsq(G, z)
return m
def polyval2d(x, y, m):
order = int(np.sqrt(len(m))) - 1
ij = itertools.product(range(order+1), range(order+1))
z = np.zeros_like(x)
for a, (i,j) in zip(m, ij):
z += a * x**i * y**j
return z
main()
-
三维-离散点-曲面光滑-拟合
2013-10-15 20:23:49三维-离散点-曲面光滑-拟合. 实现三维数据的曲面拟合,有不同的光滑程度,可以改变参数实现曲面的光滑度改变。 -
[Python] 三维散点/曲线/曲面 ( 含有笔记、代码、注释 )
2020-11-20 19:32:33#作图 ax3.plot_surface(X,Y,Z,cmap='rainbow') # 改变cmap参数可以控制三维曲面的颜色组合, 一般我们见到的三维曲面就是 rainbow 的 plt.show() 曲面颜色 import matplotlib as mpl from mpl_toolkits.mplot3d ...3D散点
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
xs1 = np.random.randint(30,40,100)
ys1 = np.random.randint(20,30,100)
zs1 = np.random.randint(10,20,100)
xs2 = np.random.randint(50,60,100)
ys2 = np.random.randint(30,40,100)
zs2 = np.random.randint(50,70,100)
xs3 = np.random.randint(10,30,100)
ys3 = np.random.randint(40,50,100)
zs3 = np.random.randint(40,50,100)
# 方式1:设置三维图形模式
fig = plt.figure() # 创建一个画布figure,然后在这个画布上加各种元素。
ax = Axes3D(fig) # 将画布作用于 Axes3D 对象上。
ax.scatter(xs1,ys1,zs1) # 画出(xs1,ys1,zs1)的散点图。
ax.scatter(xs2,ys2,zs2,c='r',marker='^')
ax.scatter(xs3,ys3,zs3,c='g',marker='*')
ax.set_xlabel('X label') # 画出坐标轴
ax.set_ylabel('Y label')
ax.set_zlabel('Z label')
plt.show()
3D曲线
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 设置图例字号
mpl.rcParams['legend.fontsize'] = 10
# 方式2:设置三维图形模式
fig = plt.figure()
ax = fig.gca(projection='3d')
# 测试数据
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-4, 4, 100) / 4
r = z**3 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
# 绘制图形
ax.plot(x, y, z, label='parametric curve')
# 显示图例
ax.legend()
# 显示图形
plt.show()
3D曲线拟合(含噪音)
# 不含噪声散点图
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 设置图例字号
mpl.rcParams['legend.fontsize'] = 10
# 方式2:设置三维图形模式
fig = plt.figure()
ax = fig.gca(projection='3d')
# 测试数据
x = np.linspace(-4 * np.pi, 4 * np.pi, 30)
y = x
z = x * x
ax.scatter(x,y,z) # 画出(x,y,z)的散点图。
运行结果:
# 不含噪声曲线图
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 设置图例字号
mpl.rcParams['legend.fontsize'] = 10
# 方式2:设置三维图形模式
fig = plt.figure()
ax = fig.gca(projection='3d')
# 测试数据
x = np.linspace(-4 * np.pi, 4 * np.pi, 30)
y = x
z = x * x
# 绘制图形
ax.plot(x, y, z, label='parametric curve')
# 显示图例
ax.legend()
# 显示图形
plt.show()
# 含噪声散点图
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 设置图例字号
mpl.rcParams['legend.fontsize'] = 10
# 方式2:设置三维图形模式
fig = plt.figure()
ax = fig.gca(projection='3d')
# 测试数据
x = np.linspace(-4 * np.pi, 4 * np.pi, 30)
y = x + np.random.randn(y.shape[-1]) * 2.5
z = x * x
ax.scatter(x,y,z) # 画出(x,y,z)的散点图。
运行结果:
# 含噪声曲线图
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 设置图例字号
mpl.rcParams['legend.fontsize'] = 10
# 方式2:设置三维图形模式
fig = plt.figure()
ax = fig.gca(projection='3d')
# 测试数据
x = np.linspace(-4 * np.pi, 4 * np.pi, 30)
y = x + np.random.randn(x.shape[-1]) * 2.5
z = x * x
# 绘制图形
ax.plot(x, y, z, label='parametric curve')
# 显示图例
ax.legend()
# 显示图形
plt.show()
# 含噪声曲线拟合图
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 设置图例字号
mpl.rcParams['legend.fontsize'] = 10
# 方式2:设置三维图形模式
fig = plt.figure()
ax = fig.gca(projection='3d')
# 测试数据
x = np.linspace(-4 * np.pi, 4 * np.pi, 30)
y = x + np.random.randn(x.shape[-1]) * 0.7
z = x * x
# 绘制图形
ax.plot(x, y, z, label='parametric1 curve')
p_yx = np.polyfit(y,x,2);
x_out = np.polyval(p_yx, y);
p_yz = np.polyfit(y,z,2);
z_out = np.polyval(p_yz, y);
ax.plot(x_out, y, z_out, label='parametric2 curve')
# 显示图例
ax.legend()
# 显示图形
plt.show()
# 拟合是拟合出一个误差小的曲线,这里并不包括光滑,当噪音大时,拟合的曲线不光滑。
3D曲面
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3 = plt.axes(projection='3d')
plt.rcParams['font.sans-serif']=['FangSong'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
#定义三维数据
xx = np.arange(-5,5,0.5)
yy = np.arange(-5,5,0.5)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(X)+np.cos(Y)
#作图
ax3.plot_surface(X,Y,Z,cmap='rainbow')
# 改变cmap参数可以控制三维曲面的颜色组合, 一般我们见到的三维曲面就是 rainbow 的
plt.show()
曲面颜色
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
'''使用figure对象'''
fig = plt.figure()
'''创建3D轴对象'''
ax = Axes3D(fig)
'''X坐标数据'''
X = np.arange(-2,2,0.1)
'''Y坐标数据'''
Y = np.arange(-2,2,0.1)
'''计算3维曲面分格线坐标'''
X,Y = np.meshgrid(X,Y)
'''用于计算X/Y对应的Z值'''
def f(x,y):
return (1-y**5+x**5)*np.exp(-x**2-y**2)
'''plot_surface函数可绘制对应的曲面'''
ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.cool) # 通过修改camp修改曲面颜色
'''显示'''
plt.show()
曲面旋转
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
'''使用figure对象'''
fig = plt.figure()
'''创建3D轴对象'''
ax = Axes3D(fig)
'''X坐标数据'''
X = np.arange(-2,2,0.1)
'''Y坐标数据'''
Y = np.arange(-2,2,0.1)
'''计算3维曲面分格线坐标'''
X,Y = np.meshgrid(X,Y)
'''用于计算X/Y对应的Z值'''
def f(x,y):
return (1-y**5+x**5)*np.exp(-x**2-y**2)
'''plot_surface函数可绘制对应的曲面'''
ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.hot)
'''旋转'''
ax.view_init(elev=30,azim=125)
'''显示'''
plt.show()
3D条形图
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(8)
y = np.random.randint(0,10,8)
y2 = y + np.random.randint(0,3,8)
y3 = y2 + np.random.randint(0,3,8)
y4 = y3 + np.random.randint(0,3,8)
y5 = y4 + np.random.randint(0,3,8)
clr = ['red','green','blue','black','white','yellow','orange','pink']
fig = plt.figure()
ax = Axes3D(fig)
ax.bar(x,y,0,zdir='y',color=clr)
ax.bar(x,y2,10,zdir='y',color=clr)
ax.bar(x,y3,20,zdir='y',color=clr)
ax.bar(x,y4,30,zdir='y',color=clr)
ax.bar(x,y5,40,zdir='y',color=clr)
ax.set_xlabel('X label')
ax.set_ylabel('Y label')
ax.set_zlabel('Z label')
plt.show()
附录01:三维绘图函数Axes3D
① mpl_toolkits.mplot3d是Matplotlib里面专门用来画三维图的工具包。
② Axes3D是mpl_toolkits.mplot3d中的一个绘图函数。
③ 创建 Axes3D主要有两种方式,一种是利用关键字projection='3d'来实现,另一种则是通过从mpl_toolkits.mplot3d导入对象Axes3D来实现,目的都是生成具有三维格式的对象Axes3D。
附录02:.view_init(elev,azim)
① elev为仰角,azim为方位角。
参考文献:
帮忙点个赞,谢谢!整理不易,给点鼓励,谢谢!
我整理的所有笔记!( 专栏里有 )
-
使用Python做3-d曲面拟合
2020-11-20 19:33:01我可以使用模块(scipy.optimize.least_squares)做1-d曲线拟合(当然,我还可以使用直接curve_fit模块),像这样使用Python做3-d曲面拟合def f(par,data,obs):return par[0]*data+par[1]-obsdef get_f(x,a,b):...我可以使用模块(scipy.optimize.least_squares)做1-d曲线拟合(当然,我还可以使用直接curve_fit模块),像这样使用Python做3-d曲面拟合
def f(par,data,obs):
return par[0]*data+par[1]-obs
def get_f(x,a,b):
return x*a+b
data = np.linspace(0, 50, 100)
obs = get_f(data,3.2,2.3)
par = np.array([1.0, 1.0])
res_lsq = least_squares(f, par, args=(data, obs))
print res_lsq.x
我能得到正确的拟合参数(3.2,2.3),但是当我概括这种方法多维度,这样
def f(par,data,obs):
return par[0]*data[0,:]+par[1]*data[1,:]-obs
def get_f(x,a,b):
return x[0]*a+b*x[1]
data = np.asarray((np.linspace(0, 50, 100),(np.linspace(0, 50, 100))))
obs = get_f(data,1.,1.)
par = np.array([3.0, 5.0])
res_lsq = least_squares(f, par, args=(data, obs))
print res_lsq.x
我发现我不能得到正确的答案,即(1,1。 ),我不知道我是否犯了一个错误。
2016-11-08
john
-
基于移动最小二乘法的点云曲面拟合(python)
2020-11-24 22:08:35使用点云数据拟合曲面时,由于点云的数据量大、形状复杂的特点,如果使用传统的最小二乘法拟合可能会得到病态的曲面方程,从而导致较大的误差。而使用移动最小二乘法拟合点云不仅能够减少误差,提升局部的准确率,还... -
python 三维曲面插值
2022-05-08 16:05:06python 三维曲面插值 -
用Python拟合多项式曲面
2020-11-24 22:08:35现在,两年后,我可以解决这个问题:这是一个具有多项式特征的经典回归问题,其中输入变量排列在网格中。在下面的代码中,我手动计算了我需要的多项式特征,分别是这些特征,它们将解释我的目标变量。... -
python 画三维图像 曲面图和散点图的示例
2021-01-20 05:34:43用python画图很多是根据z=f(x,y)来画图的,本博文将三个对应的坐标点输入画图: 散点图: import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111... -
python 实现三维平面拟合 附纸质版最小二乘法的推导与程序的实现
2021-10-07 11:07:34wireframe(x_p, y_p, z_p, rstride=10, cstride=10) plt.show() 2.3程序结果(作者的数据绘制出的图) 程序参考:python如何拟合三维平面(拟合Intel Realsense D435深度数据点)_Dontla的博客-CSDN博客_python 拟合... -
利用python进行曲面拟合并进行3D显示
2020-11-20 19:32:33利用python进行曲面拟合并进行3D显示2019-10-15之前通常都是用matlab高效处理3d数据的插值和显示,切换到python后,利用scipy的curve_fit和pyecharts的3D显示,可以替代原来的matlab解决方案。曲面插值数据构造和... -
python-基于通过散点的类别的3D颜色曲面
2020-11-23 18:37:24我有以下格式的数据:X,Y,Z,类别我使用plotly生成散点图,然后使用以下代码通过散点拟合曲线.from scipy.interpolate import griddataimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib import cm... -
三维数据点的二次曲面拟合
2021-03-05 20:55:57我想«二次曲面»比«平面»更正确。在问题是拟合z=ax^2+by^2+cxy+dx+ey+f到给定的点集P你需要通过公式来计算剩余距离。在对于每个3D点,p的残差为| p|2–ap_0^2+bp|1^2+c*p_0*p|1+dp|0+ep|你需要最小化所有的残差,... -
Python 3D多项式曲面拟合,取决于顺序
2021-07-16 12:27:58I am currently working with astronomical data among which I have comet images. I would like to remove the background sky gradient in these images due to the time of capture (twilight).... -
phython拟合曲面方程_python数据关系型图表散点图系列曲面拟合图
2020-11-21 23:55:39曲面拟合图曲面拟合用于二维变量与目标函数之间关系的分析;曲面拟合:根据实际实验测试数据,求取函数f(x,y)与变量x及y之间的解析式,使其通过或近似通过所有的实验测试点;即使所有实验数据点能近似地分布在函数f... -
scipy.optimize.curve_fit 拟合多维曲面问题
2020-12-08 14:25:30在做模板匹配算法过程中,想要通过拟合高斯曲面的方式实现亚像素精度。初始代码如下# 创建一个函数模型用来生成数据def func1(x, a, b, c, d):r = a * np.exp(-((x[0] - b) ** 2 + (x[1] - d) ** 2) / (2 * c ** 2))... -
利用三维坐标matlab创建三维曲面
2020-11-24 22:08:12最近遇到个问题,如何利用一大堆三维坐标点,拟合出三维曲面。不知道大家有没有遇见过,就是下面这种。我当然是上网百度啊之类的,想看看要怎么作,但转了一圈下来,发现网上几乎是关于下面情况的作图说明,即:我... -
Python数据分析(01) 绘制三维曲面图像
2021-02-04 22:11:43图像便于展示自己的研究成果,或作为研究步骤用于分析结论、提供灵感。下面介绍python3绘制三维曲面图的步骤。包括np.meshgrid、axes.plot_surface的使用及图像展示。 -
【曲线拟合】python实现二维曲线拟合
2020-07-13 16:14:14item[0])[0][1] # 取最佳拟合输出 if minn == 'mi': show(mi) elif minn == 'zhishu': show(zhishu) else: show(duishu) 效果图 参考资料 python 对于任意数据和曲线进行拟合并求出函数表达式的三种方案。... -
python 二次曲面拟合求三维点集的曲率
2021-05-12 22:07:54二次曲面拟合求三维点集的主曲率、高斯曲率、平均曲率。(python版本) -
基于图像的三维重建与基于三维点云数据的曲面拟合
2017-04-07 13:50:10侧影轮廓线三维重建 此类方法是使用一系列物体的轮廓线条构成三维形体。当物体的部分表面无法在轮廓联机展现时,重建后将丢失三维信息。常见的方式是将待测物放置于电动转盘上,每次旋转一小角度后拍摄其图像,再... -
python 绘图---2D、3D散点图、折线图、曲面图
2020-11-23 18:37:22python中绘制2D曲线图需要使用到Matplotlib,Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图... -
【求助大神】请问怎么将散点画出三维曲面,最好可以拟合出这个曲面的方程……
2020-11-20 19:33:03设第一列数据为x,第二列为y,第三列为z,四组数据拟合为一个方程为:第一个参考结果:z = (p1+p2*x+p3*x^2+p4*x^3+p5*y+p6*y^2)/(1+p7*x+p8*x^2+p9*y+p10*y^2+p11*y^3)Correlation Coef. (R): 0.999445379241553R-... -
python – 三维空间中直线曲线的样条插值系数
2020-11-24 22:08:32我也是python的新手,但是我最近的搜索引导我到a very helpful scipy interpolation tutorial.从我的阅读中我发现BivariateSpline类/函数系列用于插入3D曲面而不是3D曲线.对于我的3D曲线拟合问题(我认为它与你的非常... -
TensorFlow学习之平面拟合三维数据
2020-12-08 09:40:47生成一些三维数据,然后用一个平面进行拟合2 实验代码及结果截图#coding:utf-8import tensorflow as tfimport numpy as np#生成假数据,总共100个点x_data=np.float32(np.random.rand(2,100))y_data=np.dot([0....