Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

SciPy 插值


什么是插值?

插值是一种在给定点之间生成点的方法。

例如:对于点 1 和 2,我们可以进行插值并找到点 1.33 和 1.66。

插值有很多用途,在机器学习中,我们经常处理数据集中缺失的数据,插值通常用于替换这些值。

这种填充值的方法称为插补

除了插补之外,插值通常用于需要平滑数据集中离散点的情况。


如何在 SciPy 中实现它?

SciPy 为我们提供了一个名为scipy.interpolate的模块,该模块包含许多用于处理插值的函数


一维插值

函数interp1d()用于插值一个具有 1 个变量的分布。

它接收xy点,并返回一个可调用的函数,该函数可以用新的x调用并返回相应的y

示例

对于给定的 xs 和 ys,插值从 2.1、2.2... 到 2.9 的值

from scipy.interpolate import interp1d
import numpy as np

xs = np.arange(10)
ys = 2*xs + 1

interp_func = interp1d(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

结果

  [5.2  5.4  5.6  5.8  6.   6.2  6.4  6.6  6.8]

自己试试 »

注意:新的 xs 应该与旧的 xs 在同一范围内,这意味着我们不能用大于 10 或小于 0 的值调用interp_func()



样条插值

在一维插值中,点适合于单一曲线,而在样条插值中,点适合于由称为样条的多项式定义的分段函数。

函数UnivariateSpline()接收xsys,并生成一个可调用的函数,该函数可以用新的xs调用。

分段函数:一个函数,它对不同的范围有不同的定义。

示例

找到以下非线性点的 2.1、2.2... 2.9 的单变量样条插值

from scipy.interpolate import UnivariateSpline
import numpy as np

xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1

interp_func = UnivariateSpline(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

结果

  [5.62826474 6.03987348 6.47131994 6.92265019 7.3939103  7.88514634
   8.39640439 8.92773053 9.47917082]

自己试试 »

径向基函数插值

径向基函数是相对于固定参考点定义的函数。

函数Rbf()也接收xsys作为参数,并生成一个可调用的函数,该函数可以用新的xs调用。

示例

使用 rbf 对以下 xs 和 ys 进行插值,并找到 2.1、2.2 ... 2.9 的值

from scipy.interpolate import Rbf
import numpy as np

xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1

interp_func = Rbf(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

结果

  [6.25748981  6.62190817  7.00310702  7.40121814  7.8161443   8.24773402
   8.69590519  9.16070828  9.64233874]

自己试试 »


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.