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

kninwzqo  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(235)

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

  1. import io
  2. import numpy as np
  3. import pandas as pd
  4. from scipy.interpolate import griddata, Rbf
  5. from numpy import ma
  6. import matplotlib.pyplot as plt
  7. data_str = # insert the string from the url here
  8. vol = pd.read_csv(io.StringIO(data_str))
  9. vol.set_index('dte',inplace=True)
  10. valid_vol=ma.masked_invalid(vol).T
  11. Ti=np.linspace(float((vol.index).min()),float((vol.index).max()),len(vol.index))
  12. Ki=np.linspace(float((vol.columns).min()),float((vol.columns).max()),len(vol.columns))
  13. Ti,Ki = np.meshgrid(Ti,Ki)
  14. valid_Ti = Ti[~valid_vol.mask]
  15. valid_Ki = Ki[~valid_vol.mask]
  16. valid_vol = valid_vol[~valid_vol.mask]
  17. zi = griddata((valid_Ti, valid_Ki), valid_vol, (Ti, Ki), method='cubic')
  18. points = np.column_stack((Ti.ravel(), Ki.ravel()))
  19. values = zi.ravel()
  20. mask = ~np.isnan(values)
  21. values = values[mask]
  22. points = points[mask]
  23. rbf = Rbf(points[:, 0], points[:, 1], values, function='linear')
  24. interp_value = rbf(0.015, 4545)
  25. fig = plt.figure()
  26. ax = fig.add_subplot(111, projection='3d')
  27. x = np.linspace(Ti.min(),Ti.max(),100)
  28. y = np.linspace(Ki.min(),Ki.max(),100)
  29. x,y=np.meshgrid(x,y)
  30. z = rbf(x,y)
  31. ax.plot_surface(x, y, z, cmap='viridis')
  32. plt.show()

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

zaqlnxep

zaqlnxep1#

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

相关问题