scipy 如何使用“interpolate.Rbf”在二维二元样条曲线范围外进行外推(类似于interp1d中的“fill_value='extrapolate ")

kninwzqo  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

我尝试使用interpolate.Rbf外推2d样条的给定范围。
从这里插入str:https://justpaste.it/d7u7zdata_str(不需要''字符串连字符)
我怎么能找到Ti的边界之外的zi的值。我希望能够找到ziTi = 0。即计算rbf(0,4500)
我的代码是:

import io
import numpy as np
import pandas as pd
from scipy.interpolate import griddata, Rbf
from numpy import ma
import matplotlib.pyplot as plt

data_str = # insert the string from the url here

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]

zi = griddata((valid_Ti, valid_Ki), valid_vol, (Ti, Ki), method='cubic')

points = np.column_stack((Ti.ravel(), Ki.ravel()))

values = zi.ravel()
mask = ~np.isnan(values)
values = values[mask]

points = points[mask]

rbf = Rbf(points[:, 0], points[:, 1], values, function='linear')

interp_value = rbf(0.015, 4545)

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(x,y)
ax.plot_surface(x, y, z, cmap='viridis')
plt.show()

字符串
我没有在bisplev中使用bisplrep,因为它不能生成样条(我读了文档,没有s给出样条)。

zaqlnxep

zaqlnxep1#

您的代码使用的是griddata而不是RBF。如果您查找径向基函数,请使用RBFInterpolator。

相关问题