我有此数据https://drive.google.com/file/d/15ugQJq_85n--eSEs6TnrFltPpzIugaJq/view?usp=sharing
我正在尝试使用来自
scipy.interpolate
的网格数据。缺失数据和 -inf 值需要被忽略。我想要一个有 200 个不同 T 和 K 的表面。这是我尝试过的:
import pandas as pd
import numpy as np
from scipy.interpolate import griddata
imp_vol=pd.read_csv("data.csv",index_col='dte')
T=imp_vol.index
K=imp_vol.columns
Ti=np.linspace(float(T.min()),float(T.max()),200)
Ki=np.linspace(float(K.min()),float(K.max()),200)
Ti,Ki = np.meshgrid(Ti,Ki)
T,K = np.meshgrid(T,K)
iv_interpol=griddata((T[~np.isnan(imp_vol)],K[~np.isnan(imp_vol)]), imp_vol[~np.isnan(imp_vol)].T, (Ti, Ki),method='linear')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(Ti, Ki, iv_interpol)
但我不断收到不同的尺寸错误。即使我将数组变成一维,它也不起作用
我得到的错误是:
“索引错误:布尔索引与维度 0 上的索引数组不匹配;维度为 10,但对应的布尔维度为 15”
这是我的 imp_vol 数据框的图像
我不应该扮演侦探来找出问题出在哪里,以及相关数组的大小是多少:(
涉及
Ti
等的东西不会成为问题,因为这些数组的大小为 20。
但是
T/K
涉及从文件加载的数据,并且 griddata
的参数具有适当的布尔索引,例如
T[~np.isnan(imp_vol)]
T
是 meshgrid
的 2d。是什么形状的?数据类型?
imp_vol
是一个形状未知的框架(我不看链接的图像 - 除非......)。 np.isnan
大概给出一个二维数组。看起来该数组和 T
(或 K
或...)之间的大小不匹配。
我不会再深入探讨这一点。这是你应该做的事情,而不是随意尝试编程墙,希望某些东西会粘住。