python三维插值从规则网格到散点_python中三维样条插值

该博客介绍了如何使用Python的scipy库中的Rbf方法进行三维样条插值。通过创建高分辨率的栅格空间(132000点),在51个数据点上拟合样条曲线,并将其应用到更大的数据集(132000点)上。示例展示了如何生成和可视化3D数据,以及如何避免过度拟合问题。
摘要由CSDN通过智能技术生成

3+维的样条插值可以使用scipy.interpolate.Rbf完成,如您所述。为了绘图,您可以使用较小的分辨率(1000点是一个很好的经验法则),当您想要计算样条曲线时,您可以在大于132000点的点上进行插值,而不会出现问题(请参见下面的示例)。

你能在matlab中添加一个Minimal, Complete, and Verifiable example来做你想做的事情吗?这将解释为什么需要创建分辨率为132000点的栅格空间。另外,请注意,有一个维度诅咒。Matlab使用的cubic spline or a piecewise polynomial可能由于过度拟合而变得危险。我建议您使用一种更理智的方法来培训51个数据点,并应用到132000多个数据点。This是多项式曲线拟合和模型选择的一个很好的例子。

示例:

生成数据:import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import axes3d

%matplotlib inline

import random

# set seed to reproducible

random.seed(1)

data_size = 51

max_value_range = 132651

x = np.array([random.random()*max_value_range for p in range(0,data_size)])

y = np.array([random.random()*max_value_range for p in range(0,data_size)])

z = 2*x*x*x + np.sqrt(y)*y + random.random()

fig = plt.figure(figsize=(10,6))

ax = axes3d.Axes3D(fig)

ax.scatter3D(x,y,z, c='r')

拟合样条曲线并插值x_grid = np.linspace(0, 132651, 1000*len(x))

y_grid = np.linspace(0, 132651, 1000*len(y))

B1, B2 = np.meshgrid(x_grid, y_grid, indexing='xy')

Z = np.zeros((x.size, z.size))

import scipy as sp

import scipy.interpolate

spline = sp.interpolate.Rbf(x,y,z,function='thin_plate',smooth=5, episilon=5)

Z = spline(B1,B2)

fig = plt.figure(figsize=(10,6))

ax = axes3d.Axes3D(fig)

ax.plot_wireframe(B1, B2, Z)

ax.plot_surface(B1, B2, Z,alpha=0.2)

ax.scatter3D(x,y,z, c='r')

在大数据上拟合样条曲线predict_data_size = 132000

x_predict = np.array([random.random()*max_value_range for p in range(0,predict_data_size)])

y_predict = np.array([random.random()*max_value_range for p in range(0,predict_data_size)])

z_predict = spline(x_predict, y_predict)

fig = plt.figure(figsize=(10,6))

ax = axes3d.Axes3D(fig)

ax.plot_wireframe(B1, B2, Z)

ax.plot_surface(B1, B2, Z,alpha=0.2)

ax.scatter3D(x_predict,y_predict,z_predict, c='r')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值