Python 三维插值

Python 三维插值,python,python-3.x,interpolation,Python,Python 3.x,Interpolation,我试图更清楚地重新表述我的问题: 我想对我的数据进行3D插值,但我找不到好的scipy来解决我的问题,也找不到正确的方法来处理它 假设您在一个三维笛卡尔空间(x,y,z)。(x,y)=>(200x200)平面面向您,您可以看到一些值的图形表示,形成散点图。这些值是由一个模型估计的,该模型在特定波长下查看对象的属性。我使用的模型只能处理总共20个波长,这是我们的z轴。因此,如果我们再次使用我的问题的图形表示,您有20层图,从一个名为lambda_min的值开始,到达第20个和最后一个波长:lamb

我试图更清楚地重新表述我的问题:

我想对我的数据进行3D插值,但我找不到好的
scipy
来解决我的问题,也找不到正确的方法来处理它

假设您在一个三维笛卡尔空间
(x,y,z)
(x,y)=>(200x200)
平面面向您,您可以看到一些值的图形表示,形成散点图。这些值是由一个模型估计的,该模型在特定波长下查看对象的属性。我使用的模型只能处理总共20个波长,这是我们的
z轴。因此,如果我们再次使用我的问题的图形表示,您有20层图,从一个名为
lambda_min
的值开始,到达第20个和最后一个波长:
lambda_max
。绘图的每一层都由常规步骤分隔。但正如你所猜测的,由于我们生成的模型数量有限(20个),我们无法估计差距之间的值:这就是我问题的目的

我们如何为一个或多个特定波长
(z)
插入数据
(y)
,而不是由我们的模型生成的。我确定所有模型的
x
值采样是相同的
(x,y)
平面中关于波长的唯一变化参数是物理量的估计
(y)

我的数据在一个名为
V
的数组中排序(根据我处理的数量:可视性调用),该数组的形状为
(10200)

因此,当我调用
V[w][k]
时,这给了我一个点:在
x轴
(=
q
空间频率)上的特定点
k
处,对给定
w
(=波长==>
z
)估计的能见度


x轴
数据(空间频率)分别存储在一个称为
q
的1D数组中,长度
200
,对于所有波长都是相同的。

根据您的问题,听起来您有以下问题。如果我错了,请纠正我:

x=[1,2,200]
y=[1,2,200]
z=[z0,…,z20]
V=V(z,k,y)=V(z,k(x),y)
你说你知道上面给出的所有
x
y
z
。并且知道你想知道实数
y'
z'
,其中
1
z0

因此,我们感兴趣的是:

res=V(z',k(x),y')
我没弄错吧

如果是这样,我们有一个二维插值问题。获取并输入正确的数据

对于[1,2,…,200]中给定的
val_x
执行以下操作:

all_y=np.arange(1200+1)
所有_z=[z0,…,z20]
all_V_x=[[V(z,k(val_x),y)代表y在all_y]代表z在all_z])
estimate_V_x=scipy.interpolate.interp2d(all_y,all_z,all_V_x,kind='cubic'))
现在我们有了一个函数来获得给定的
valux
z'
y'
V
估计值。我们只需要对其进行评估:

res=估算值(y新,z新)
这为我们提供了
V(z',k(x),y')
的结果

要将其全部插入,请执行以下操作:

all_x=np.arange(1200+1)
all_y=np.arange(1200+1)
所有_z=[z0,…,z20]
def get_V(z,k,y):
在all_z中断言z,在all_y中断言y
返回…#你的计算数据在这里
def get_k(x):
在所有x中断言x
返回…#你的计算数据在这里
def估算值(x,新y,新z):
在所有x中断言x
all_V_x=[[get_V(z,get_k(val_x),y)代表y在所有y中]代表z在所有z中])
estimate_V_x=scipy.interpolate.interp2d(all_y,all_z,all_V_x,kind='cubic'))
收益估计值(新值、新值)
注意这里的
new_y
new_z
也可以是数组,以加快速度


我不确定我是否做对了,或者这是否有意义。让我知道。

谢谢我的一个朋友和@Chris answer我意识到问题不是3D而是2D问题,然后我尝试再次使用
scipy.interpolate.interp2d

然后,为了估计在特定空间频率下给定波长的V值

f = scipy.interpolate.interp2d(x=q,y=wavel,z=V)
在哪里

np.shape(q) = (200,)
np.shape(w) = (10,)
np.shape(V) = (10,200)

当我第一次尝试时,我的问题是反转x和y值,然后错误是由形状错误引起的。但现在我更好地定义了我的问题,然后我们意识到,通过反转x轴和y轴,我们现在可以很好地使用这种方法

那么,对于给定的波长,您希望在哪些(2?)文件之间进行插值呢?@martineau我希望在整个数据集之间进行插值。我将举一个例子来说明:如果我有5个文件,每个文件有5个不同的波长,在3µm到10µm之间,那么我有x轴和y轴的值(2列长度K)。我想对数据进行插值,最后只输入我想要的波长作为y轴值的输出(知道x轴值在所有文件上都是固定的)。与只输入x值进行插值时使用scipy.interpolate.interp1d的方法相同,在这里,我想插入一个W值,作为y值的对应列表的输出。我试图重新表述我的问题,以便更清楚地表示我的问题@martineauJulien:据我所知,你的问题(现在)有一个很好的解释——这不在我的专业领域。嘿@Chris谢谢你的回答,事实上,“y”是V值,“x”是空间频率,“z”是波长。我想知道的是,在我的x轴间隔点中,给定“z”的V值(然后用该波长的所有V插值值创建一个新散点图),然后在给定“z”的V估计新台架之间进行1D插值,以针对“x”的点“y”。最后一点我可以通过scipy的1D插值来实现,但是