如何取三线性插值函数的导数?

时间:2019-02-04 00:38:03

标签: python numpy scipy interpolation hdf5

我是python的新用户。我有3D常规网格数据作为h5文件格式。我可以使用RegularGridInterpolator进行数据插值(三线性插值)。但是,我不知道如何从插值函数中提取导数。

(我的问题类似于How to get special derivative from an interpolated function,但那里似乎没有适当的解决方案,所以我想我会再问一次。)

实际上,我正在为我的h5文件尝试使用与此问题(How to get special derivative from an interpolated function)相同的代码。我的h5文件可以从此链接(https://drive.google.com/open?id=1cpnZBGDgbijAH0kJchcecTM5lKasiflp)下载。

期待专家的帮助。

我的代码:

import numpy as np   
import h5py
import matplotlib.pyplot as plt
from scipy.interpolate import RegularGridInterpolator
f = h5py.File('k.h5', 'r') 
list(f.keys())
dset = f[u'data']
dset.shape
dset.value.shape
dset[0:64,0:64,0:64]
x = np.linspace(-160, 160, 64) 
y = np.linspace(-160, 160, 64)
z = np.linspace(-160, 160, 64)
my_interpolating_function = RegularGridInterpolator((x, y, z), dset.value)
pts = np.array([4.5, 15.3, 18.8]) 
my_interpolating_function(pts)

1 个答案:

答案 0 :(得分:0)

如果要在(x,y,z)上找到部分 df / dx ,请调用内插函数 f(x,y,z) ,它只是 f(floor(x + 1),y,z)-f(floor(x),y​​,z)。导数并没有真正定义为 x 的整数值,因为它会在这些点改变。

这假设一个网格具有单位间距。

沿其他轴的局部相似。