在具有不同输入大小的网格上插入函数

问题描述

我有一个函数 f(u,v,w),我想使用 scipy 函数(使用线性插值)对其进行插值。这很容易。

当我运行插值步骤时,我只需执行以下操作(在 u、v、w 网格上插值):

u = np.linspace(-1,1,100)
v = np.linspace(-2,2,50)
w = np.linspace(3,8,30)

values_grid = np.zeros((len(u),len(v),len(w)))
count = 0
for i in range(len(u)):
    for j in range(len(w)):
        for k in range(len(w)):
             values_grid[i,j,k] = f(u[i],v[j],w[k])

from scipy.interpolate import RegularGridInterpolator
my_interpolating_function = RegularGridInterpolator((u,w),values_grid,method='linear',bounds_error=False,fill_value=-999)

这在很多情况下都很好。但是,当我想评估这个插值函数时,似乎我需要使用形状为 [(输入样本数)x(样本维度)] 的输入。例如:

func_input = np.vstack([u_samps,v_samps,w_samps].T # E.g. shape is 500,3
output = my_interpolating_function(func_input)) # Has output shape 500

这很好用。问题是我想在样本具有以下形状的网格上评估此函数

shape(u_samps) = 500
shape(v_samps) = (100,100)
shape(w_samps) = (100,100)

意思是我想评估

my_interpolating_function([u_samps,w_samps])

并取出形状为 (500,100,100) 的数组(因此对 v_samps 和 w_samps 网格上的所有 500 u_samps 进行插值计算)。我可以展平 v_samps 和 w_samps 数组,但是我必须制作几个(数百个)u_samps 副本才能将输入转换为正确的格式。那么有没有什么办法可以得到一个插值函数,它可以采用上面的输入(具有指定形状的 u_samps、v_samps、w_samps)并有效地得到一个形状为(500,100)的数组?

非常感谢任何帮助,我一直被困在这个问题上,这真的阻碍了我的进步!最终目标是在需要用 MCMC 采样的统计似然性中使用此函数,因此速度非常重要(并且制作数百个海量阵列的副本非常慢)

解决方法

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

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

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