错误:使用 Autograd 和 Scipy Interpolation(bisplrep) 时,“无法根据规则‘安全’将数组数据从 dtype('O') 转换为 dtype('float64')”

问题描述

我试图用 Autograd 的“grad”函数(我必须强制使用这个函数)来区分一个矩阵的函数,它是一个输入。

问题在于,为了获得输出,首先我必须对这些矩阵值进行插值,而不是其他输入。

为此,我必须在 Autograd 中使用 scipy 实现(导入 autograd.scipy.special 作为 sc),尤其是 bisplrep。此函数返回一个列表 (tck),其中包含多个元素、节点、插值度......当我使用 auotgrad 时,我得到了标题错误

我读了很多,事实上,我认为这是因为数组是 float64 类型并且插值的度数是 int 而不是 int64(每个元素都应该是双倍?)。

尽管如此,我不知道如何解决这个问题,因为使 tck[3:5]=np.int64(tck[3:5]) 不起作用。

以下示例,其中 venc 和 mon 是 float64 数组:

xx,yy = np.meshgrid(venc,mon)

tck = sc.scipy.interpolate.bisplrep(xx,yy,matrix,kx= sc.scipy.int64(1),ky=sc.scipy.int64(3)) 
    
def spline_iv(exp,mon,tck):    
    iv = sc.scipy.interpolate.bisplev(exp,tck)
    return iv

def imp_vol1(exp,mon):
    return spline_iv(exp,tck)#,kx=1,ky=3) )
   
value = mc_value(option_type,S0,K,r,T,I,N,imp_vol1,q=0)

最后,我将 Autograd 用于一个函数,其中前面的代码在里面,“矩阵”在第 7 个位置:

vega = grad(compute_mc_value,7)
v_grad1 = vega('C',11020.1,0.06,0.3,1000,50,venc,mon)

由于 bisplrep,我得到了标题错误

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)