我无法从 scripy.interpolate 获取网格数据以在 python 中工作

问题描述 投票:0回答:1

我有此数据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 数据框的图像

array

scipy interpolation surface scipy-optimize
1个回答
0
投票

我不应该扮演侦探来找出问题出在哪里,以及相关数组的大小是多少:(

涉及

Ti
等的东西不会成为问题,因为这些数组的大小为 20。

但是

T/K
涉及从文件加载的数据,并且
griddata
的参数具有适当的布尔索引,例如

T[~np.isnan(imp_vol)]

T
meshgrid
的 2d。是什么形状的?数据类型?

imp_vol
是一个形状未知的框架(我不看链接的图像 - 除非......)。
np.isnan
大概给出一个二维数组。看起来该数组和
T
(或
K
或...)之间的大小不匹配。

我不会再深入探讨这一点。这是你应该做的事情,而不是随意尝试编程墙,希望某些东西会粘住。

© www.soinside.com 2019 - 2024. All rights reserved.