0

0

使用 RBFInterpolator 进行二维样条插值并外推

DDD

DDD

发布时间:2025-09-26 18:46:01

|

932人浏览过

|

来源于php中文网

原创

使用 rbfinterpolator 进行二维样条插值并外推

本文介绍了如何使用 scipy.interpolate 库中的 RBFInterpolator 类进行二维样条插值,并实现超出原始数据范围的外推。通过示例代码演示了如何利用该方法创建插值函数,并将其应用于原始数据范围之外的点,从而得到外推值。

scipy.interpolate 库提供了多种插值方法,其中 RBFInterpolator 是一种强大的工具,尤其适用于处理散乱数据。与 griddata 相比,RBFInterpolator 更直接地使用径向基函数进行插值,并且能够方便地进行外推。

使用 RBFInterpolator 进行二维插值和外推的步骤如下:

  1. 导入必要的库:

    import io
    import numpy as np
    import pandas as pd
    from scipy.interpolate import RBFInterpolator
    from numpy import ma
    import matplotlib.pyplot as plt
  2. 准备数据:

    首先,需要准备包含自变量 (x, y) 和因变量 z 的数据。在这个例子中,数据是从一个 CSV 文件读取的。

    data_str = """
    dte,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300
    0.01369863,0.19589,0.17243,0.15383,0.13883,0.12662,0.11658,0.10826,0.10134,0.09556,0.09071,0.0866,0.08308,0.08004,0.07738,0.07504,0.07296,0.07109,0.06939,0.06785
    0.02191781,0.19463,0.17149,0.15314,0.13836,0.12632,0.11644,0.10826,0.10148,0.09582,0.09099,0.08688,0.08335,0.08029,0.0776,0.07523,0.07312,0.07122,0.06949,0.06792
    0.03013699,0.1935,0.17066,0.15253,0.13794,0.12604,0.11627,0.10819,0.1015,0.0959,0.09112,0.08704,0.0835,0.08042,0.0777,0.0753,0.07316,0.07123,0.06947,0.06787
    0.04109589,0.19149,0.16901,0.15123,0.13691,0.1253,0.11576,0.10786,0.10132,0.09584,0.09117,0.08717,0.08368,0.08058,0.07783,0.07539,0.07321,0.07124124,0.06945,0.06781
    0.06849315,0.18683,0.16511,0.14808,0.13434,0.12324,0.1141,0.10655,0.10033,0.09513,0.09067,0.08686,0.08352,0.08055,0.07795,0.07565,0.07359,0.07173,0.07002,0.06848
    0.09589041,0.18271,0.16178,0.14538,0.13211,0.12136,0.1125,0.10518,0.09918,0.09416,0.08984,0.08615,0.08292,0.08006,0.07755,0.07536,0.0734,0.07163,0.06999,0.06853
    0.12328767,0.17929,0.15892,0.14297,0.12999,0.1195,0.11085,0.10371,0.09788,0.09301,0.0888,0.08521,0.08207,0.07929,0.07685,0.07474,0.07285,0.07114,0.06956,0.06816
    0.15068493,0.17643,0.15643,0.14084,0.12809,0.11778,0.10929,0.10229,0.09658,0.0918,0.08767,0.08416,0.08109,0.07838,0.07599,0.07394,0.0721,0.07043,0.0689,0.06754
    0.17808219,0.17401,0.15429,0.13896,0.12642,0.11629,0.10795,0.10107,0.09547,0.09077,0.08671,0.08326,0.08025,0.0776,0.07526,0.07326,0.07146,0.06983,0.06833,0.067
    0.20547945,0.17195,0.15238,0.13719,0.12412484,0.11487,0.10666,0.09989,0.09439,0.08977,0.08578,0.08238,0.07942,0.07681,0.07451,0.07255,0.07078,0.06918,0.06772,0.0664
    0.23287671,0.17014,0.15069,0.13557,0.12339,0.11356,0.10547,0.0988,0.09339,0.08885,0.08492,0.08157,0.07865,0.07608,0.07382,0.07188,0.07014,0.06856,0.06712,0.06582
    0.26027397,0.16854,0.14918,0.13414,0.1221,0.1124124,0.10442,0.09785,0.09253,0.08806,0.08418,0.08087,0.07798,0.07544,0.0732,0.07128,0.06956,0.068,0.06657,0.06528
    0.28767123,0.16713,0.14784,0.13286,0.12094,0.11136,0.10348,0.09699,0.09175,0.08735,0.08352,0.08025,0.0774,0.07488,0.07266,0.07075,0.06904,0.06749,0.06607,0.0648
    0.31506849,0.16587,0.14664,0.13173,0.11994,0.11046,0.10268,0.09627,0.0911,0.08676,0.08297,0.07973,0.07691,0.07441,0.0722,0.0703,0.06861,0.06707,0.06566,0.0644
    0.34246575,0.16475,0.14557,0.13073,0.11905,0.10967,0.10198,0.09564,0.09053,0.08624,0.08249,0.07928,0.07648,0.074,0.0718,0.06991,0.06823,0.0667,0.0653,0.06405
    0.36986301,0.16375,0.14462,0.12985,0.11827,0.10897,0.10136,0.09509,0.09003,0.08578,0.08207,0.07888,0.0761,0.07364,0.07145,0.06957,0.0679,0.06638,0.06499,0.06375
    0.39726027,0.16284,0.14377,0.12907,0.11757,0.10835,0.10081,0.0946,0.08959,0.08537,0.08169,0.07852,0.07576,0.07331,0.07114,0.06927,0.06761,0.0661,0.06472,0.06349
    0.42465753,0.16203,0.14299,0.12837,0.11695,0.1078,0.10033,0.09417,0.08921,0.08502,0.08136,0.07821,0.07547,0.07303,0.07087,0.06901,0.06736,0.06586,0.06448,0.06325
    0.45205479,0.16129,0.14228,0.12773,0.11638,0.10731,0.09989,0.09378,0.08886,0.08469,0.08105,0.07792,0.07519,0.07276,0.07061,0.06876,0.06712,0.06562,0.06425,0.06303
    """
    vol = pd.read_csv(io.StringIO(data_str))
    vol.set_index('dte',inplace=True)
    
    valid_vol=ma.masked_invalid(vol).T
    
    Ti=np.linspace(float((vol.index).min()),float((vol.index).max()),len(vol.index))
    Ki=np.linspace(float((vol.columns).min()),float((vol.columns).max()),len(vol.columns))
    
    Ti,Ki = np.meshgrid(Ti,Ki)
    
    valid_Ti = Ti[~valid_vol.mask]
    valid_Ki = Ki[~valid_vol.mask]
    valid_vol = valid_vol[~valid_vol.mask]
    
    points = np.column_stack((valid_Ti.ravel(), valid_Ki.ravel()))
    values = valid_vol.ravel()
    
  3. 创建 RBFInterpolator 对象:

    Clippah
    Clippah

    AI驱动的创意视频处理平台

    下载

    使用 RBFInterpolator 类创建一个插值对象。需要传入自变量和因变量的数据。 smoothing 参数可以调整插值的平滑程度。

    rbf = RBFInterpolator(points, values, smoothing=0)
  4. 进行插值和外推:

    使用创建的 RBFInterpolator 对象进行插值和外推。 可以传入任意的 (x, y) 坐标,包括原始数据范围之外的坐标。

    # 在原始数据范围内插值
    interp_value = rbf(np.array([0.015, 4545]))
    print(f"Interpolated value at (0.015, 4545): {interp_value}")
    
    # 在原始数据范围外外推
    extrapolated_value = rbf(np.array([0, 4500]))
    print(f"Extrapolated value at (0, 4500): {extrapolated_value}")
  5. 可视化结果(可选):

    可以使用 matplotlib 库将插值结果可视化,以便更直观地了解插值效果。

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    x = np.linspace(Ti.min(),Ti.max(),100)
    
    y = np.linspace(Ki.min(),Ki.max(),100)
    x,y=np.meshgrid(x,y)
    z = rbf(np.column_stack((x.ravel(), y.ravel()))).reshape(x.shape)
    ax.plot_surface(x, y, z, cmap='viridis')
    plt.show()

完整代码示例:

import io
import numpy as np
import pandas as pd
from scipy.interpolate import RBFInterpolator
from numpy import ma
import matplotlib.pyplot as plt


data_str = """
dte,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300
0.01369863,0.19589,0.17243,0.15383,0.13883,0.12662,0.11658,0.10826,0.10134,0.09556,0.09071,0.0866,0.08308,0.08004,0.07738,0.07504,0.07296,0.07109,0.06939,0.06785
0.02191781,0.19463,0.17149,0.15314,0.13836,0.12632,0.11644,0.10826,0.10148,0.09582,0.09099,0.08688,0.08335,0.08029,0.0776,0.07523,0.07312,0.07122,0.06949,0.06792
0.03013699,0.1935,0.17066,0.15253,0.13794,0.12604,0.11627,0.10819,0.1015,0.0959,0.09112,0.08704,0.0835,0.08042,0.0777,0.0753,0.07316,0.07123,0.06947,0.06787
0.04109589,0.19149,0.16901,0.15123,0.13691,0.1253,0.11576,0.10786,0.10132,0.09584,0.09117,0.08717,0.08368,0.08058,0.07783,0.07539,0.07321,0.07124124,0.06945,0.06781
0.06849315,0.18683,0.16511,0.14808,0.13434,0.12324,0.1141,0.10655,0.10033,0.09513,0.09067,0.08686,0.08352,0.08055,0.07795,0.07565,0.07359,0.07173,0.07002,0.06848
0.09589041,0.18271,0.16178,0.14538,0.13211,0.12136,0.1125,0.10518,0.09918,0.09416,0.08984,0.08615,0.08292,0.08006,0.07755,0.07536,0.0734,0.07163,0.06999,0.06853
0.12328767,0.17929,0.15892,0.14297,0.12999,0.1195,0.11085,0.10371,0.09788,0.09301,0.0888,0.08521,0.08207,0.07929,0.07685,0.07474,0.07285,0.07114,0.06956,0.06816
0.15068493,0.17643,0.15643,0.14084,0.12809,0.11778,0.10929,0.10229,0.09658,0.0918,0.08767,0.08416,0.08109,0.07838,0.07599,0.07394,0.0721,0.07043,0.0689,0.06754
0.17808219,0.17401,0.15429,0.13896,0.12642,0.11629,0.10795,0.10107,0.09547,0.09077,0.08671,0.08326,0.08025,0.0776,0.07526,0.07326,0.07146,0.06983,0.06833,0.067
0.20547945,0.17195,0.15238,0.13719,0.12412484,0.11487,0.10666,0.09989,0.09439,0.08977,0.08578,0.08238,0.07942,0.07681,0.07451,0.07255,0.07078,0.06918,0.06772,0.0664
0.23287671,0.17014,0.15069,0.13557,0.12339,0.11356,0.10547,0.0988,0.09339,0.

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

32

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

268

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

195

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

170

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

85

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.5万人学习

Pandas 教程
Pandas 教程

共15课时 | 1万人学习

ASP 教程
ASP 教程

共34课时 | 4.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号