微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个函数 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 举报,一经查实,本站将立刻删除。