为什么 scipy.interpolate.bisplrep() 需要很长时间?尝试绘制 3D 曲面

Why does scipy.interpolate.bisplrep() take forever? Trying to plot a 3D surface

提问人:Xerium 提问时间:11/13/2023 最后编辑:Xerium 更新时间:11/13/2023 访问量:30

问:

我正在使用 ,但让我的代码运行了 2 小时,它仍然卡在尝试创建变量时。我的csv文件是: https://jmp.sh/s/cOH3gadjPNFeXU2gChVm 我的代码是:scipy.interpolate.bisplreptck

import numpy as np
import pandas as pd
import numpy.ma as ma
from scipy.interpolate import griddata,bisplrep,bisplev

vol = pd.read_csv('data.csv',index_col='dte')

T=np.array(vol.index)
K=np.array(vol.columns)
valid_vol=ma.masked_invalid(vol).T

Ti=np.linspace(float(T.min()),float(T.max()),len(T))
Ki=np.linspace(float(K.min()),float(K.max()),len(K))

Ti,Ki = np.meshgrid(Ti,Ki)
T,K = np.meshgrid(T,K)

valid_Ti = Ti[~valid_vol.mask]
valid_Ki = Ki[~valid_vol.mask]
valid_vol = valid_vol[~valid_vol.mask]

iv_interpol=griddata((valid_Ti,valid_Ki), valid_vol, (Ti, Ki),method='linear')

"""
Code gets stuck trying to create the below variable!
I have tried many different values of s
"""
tck = bisplrep(Ti, Ki, iv_interpol, s=370) 

T_new, K_new = np.mgrid[Ti.min():T.max():80j, Ki.min():Ki.max():80j]

znew = bisplev(T_new[:,0], K_new[0,:], tck)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(T_new[:,0], K_new[0,:]/S, znew)
ax.set_ylabel('Monyness K/S')
ax.set_xlabel('Expiry (Years)')
ax.set_zlabel('Implied Vol')
ax.set_title("Implied Vol of SPX")

当卷是 80x80 DataFrame 时,它几乎可以立即工作,但是一旦我把它变大,它就无法做表面。我尝试了 s=2 和 s 的其他值,但总是相同的问题bisplrep

情节 西皮 插值 表面

评论

0赞 ev-br 11/13/2023
您的数据是否包含 nans?确保它没有,然后尝试从工作正常开始增加数据大小。

答: 暂无答案