• python三维数据拟合
千次阅读
2020-12-16 17:46:08

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()

更多相关内容
• 如下所示： ...#列出实验数据 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
• 已知一些三维点坐标，拟合经过这些点的曲线。废话不多说，直接上代码： import csv import numpy as np from matplotlib import pyplot as plt filename = './dataset/Realdata.csv' with open(filename, 'U') as ...

已知一些三维点坐标，拟合经过这些点的曲线。废话不多说，直接上代码：

import csv
import numpy as np
from matplotlib import pyplot as plt

filename = './dataset/data.csv'
with open(filename, 'U') as csvfile:
Data = [row for row in reader]
x = []
y = []
z = []
for i in range(len(Data)):
temp = 0
Data[i][0] = float(Data[i][0])		# 读取csv文件的内容一般是字符，需转化为浮点数
x.append(Data[i][0])
Data[i][1] = float(Data[i][1])
y.append(Data[i][1])
Data[i][2] = float(Data[i][2])
z.append(Data[i][2])

# 绘制3D图
ax = plt.axes(projection='3d')
ax.plot3D(x, y, z, 'b.')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

## 最小二乘法求解方程
#   创建系数矩阵A和矩阵b
A = np.ones((len(Data), 3))
b = np.zeros((len(Data), 1))
for j in range(len(Data)):
A[j, 0] = x[j]
A[j, 1] = y[j]
b[j, 0] = z[j]

# 通过X=(AT*A)^(-1)*AT*b直接求解
A_T = A.T
A1 = np.dot(A_T, A)
A2 = np.linalg.inv(A1)
A3 = np.dot(A2, A_T)
X = np.dot(A3, b)
print('平面拟合结果为：z = %.3f * x + %.3f * y + %.3f' % (X[0, 0], X[1, 0], X[2, 0]))



数据的散点图：

拟合的曲线方程：

展开全文
• python最小二乘法三维坐标拟合平面-最小二乘法拟合平面
• Python实现三维拟合的方法
• 2019独角兽企业重金招聘Python工程师标准>>> ...

前言

今天为大家介绍一个利用python实现数据可视化三维拟合,具有一定的参考价值,下面就来看看具体的实现过程吧,

导入第三方库

定义3D画面

列出实验数据

表示矩阵中的值

小编推荐一个学python的学习qun 975,691720

无论你是大牛还是小白，是想转行还是想入行都可以来了解一起进步一起学习！裙内有开发工具，很多干货和技术资料分享！

在图中显示各点的位置

进行矩阵运算

用list来提取矩阵数据

绘制回归线

运行结果

可拖动,更利于分析,以上就是小编所分析的内容,希望能够帮助到大家

转载于:https://my.oschina.net/u/4104998/blog/3048235

展开全文
• 用于拟合空间圆的代码 .py文件是python代码 拟合方式是一个一个的添加点进行拟合 .m是matlab代码 拟合方式是一下子赋予很多个点 然后一起出拟合的结果
• 主要为大家详细介绍了Python Matplotlib实现三维数据的散点图绘制，具有一定的参考价值，感兴趣的小伙伴们可以参考一下
• wireframe(x_p, y_p, z_p, rstride=10, cstride=10) plt.show() 2.3程序结果（作者的数据绘制出的图） 程序参考：python如何拟合三维平面（拟合Intel Realsense D435深度数据点）_Dontla的博客-CSDN博客_python 拟合...

## 2.程序的实现

### 2.1数据集格式

程序的数据集格式如下，只要数据集格式相同，只要修改程序的文件路径即可运行。

### 2.2程序

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

x = list(df["x"])
y = list(df["y"])
z = list(df["z"])
# 构造A矩阵
A = np.zeros((3, 3))
for i in range(0, len(x)):
A[0, 0] = A[0, 0] + x[i] ** 2
A[0, 1] = A[0, 1] + x[i] * y[i]
A[0, 2] = A[0, 2] + x[i]
A[1, 0] = A[0, 1]
A[1, 1] = A[1, 1] + y[i] ** 2
A[1, 2] = A[1, 2] + y[i]
A[2, 0] = A[0, 2]
A[2, 1] = A[1, 2]
A[2, 2] = len(x)
# 构造b矩阵
b = np.zeros((3, 1))
for i in range(0, len(x)):
b[0, 0] = b[0, 0] + x[i] * z[i]
b[1, 0] = b[1, 0] + y[i] * z[i]
b[2, 0] = b[2, 0] + z[i]

# 求解x
A_inv = np.linalg.inv(A)  # 求矩阵A的逆
X = np.dot(A_inv, b)
print('平面拟合结果为：z = %.3f * x + %.3f * y + %.3f' % (X[0, 0], X[1, 0], X[2, 0]))
#
# 展示图像
fig1 = plt.figure()
ax1 = plt.axes(projection='3d')
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.set_zlabel("z")
ax1.scatter(x,y,z,c='r',marker='o')
x_p = np.array([i/1000 for i in range(-50,50)])
y_p = np.array([i/1000 for i in range(-50,50)])
x_p, y_p = np.meshgrid(x_p, y_p)
z_p = X[0, 0] * x_p + X[1, 0] * y_p + X[2, 0]
ax1.plot_wireframe(x_p, y_p, z_p, rstride=10, cstride=10)
plt.show()


### 2.3程序结果（作者的数据绘制出的图）

如果大家觉得有点难，可以使用matlab中的拟合工具箱进行拟合，更加方便。

展开全文
• 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) ...
• 用于拟合空间圆的代码 .py文件是python代码 拟合方式是一个一个的添加点进行拟合 .m是matlab代码 拟合方式是一下子赋予很多个点 然后一起出拟合的结果
• 使用 NumPy 生成假数据(phony data), 总共 100 个点. x_data = np.float32(np.random.rand(2, 100)) # 随机输入 y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 构造一个线性模型 # b = tf.Variable(tf.zeros(...
• 今天小编就为大家分享一篇对python实现二函数高次拟合的示例详解，具有很好的参考价值，希望对大家有所帮助。一起跟随小编过来看看吧
• item[0])[0][1] # 取最佳拟合输出 if minn == 'mi': show(mi) elif minn == 'zhishu': show(zhishu) else: show(duishu) 效果图 参考资料 python 对于任意数据和曲线进行拟合并求出函数表达式的种方案。...
• 参考: ... 还有: 空间3点求三点所在空间圆的圆心空间坐标(这个好像有点问题) https://blog.csdn.net/YanMY2012/article/details/8111600 ...# --------------------------------------------------------
• python里面多元非线性回归有哪些方法SciPy 里面的子函数库optimize， 一般情况下可用curve_fit函数直接拟合或者leastsq做最小二乘第九句：简单的事重复做，你就是专家；重复的事用心做，你就是赢家。Python怎么实现...
• 文章目录拟合Intel Realsense D435深度数据点 参考文章：【MQ笔记】超简单的最小二乘法拟合平面（Python） import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建...
• 更新给定点云：只需添加一个标量字段...您可以可视化标量字段：旧答案我认为可以很容易地使用PCA来将平面拟合三维点，而不是回归。以下是一个简单的PCA实现：def PCA(data, correlation = False, sort = True):"""...
• 三维-离散点-曲面光滑-拟合. 实现三维数据的曲面拟合，有不同的光滑程度，可以改变参数实现曲面的光滑度改变。
• 展开全部使用griddata函数，可进行三维拟合，并求出任意点处的值e5a48de588b63231313335323631343130323136353331333365646263，之前用过求电流温度和电阻率的函数拟合如下rq=griddata(i,t,r,iq,tq) 。具体过程如下...
• 本文python代码实现的是最小二乘法线性拟合，并且包含自己造的轮子与别人造的轮子的结果比较。 问题：对直线附近的带有噪声的数据进行线性拟合，最终求出w,b的估计值。 最小二乘法基本思想是使得样本方差最小。 ...
• 我正致力于在scipy中拟合三维分布函数。我有一个numpy数组，在x和y-bin中有计数，我正试图将其与一个相当复杂的三维分布函数相匹配。数据适合26(！)描述其两个组成种群形状的参数。我在这里了解到，当我调用leatsq时...
• Python最小二乘法拟合直线，采用了2种不同的方式，一种是直接计算，另一种是调用numpy.linalg.solve()
• 主要介绍了Python实现读取txt文件并画三维图简单代码示例，具有一定借鉴价值，需要的朋友可以参考下。

...