我尝试使用interpolate.Rbf
外推2d样条的给定范围。
从这里插入str:https://justpaste.it/d7u7z到data_str
(不需要''
字符串连字符)
我怎么能找到Ti
的边界之外的zi
的值。我希望能够找到zi
时Ti = 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
给出样条)。
1条答案
按热度按时间zaqlnxep1#
您的代码使用的是
griddata
而不是RBF。如果您查找径向基函数,请使用RBFInterpolator。