【发布时间】:2023-04-02 13:56:01
【问题描述】:
我有一个问题,我需要使用例如插入 3D 函数。 SciPy,然后保存此插值的输出以供将来使用。也就是说,我不想每次都运行插值过程,因为生成要插值的 3D 函数对计算的要求很高(它来自 Biot-Savart 定律,所以很多数值积分也是如此)。
但是,我无法理解这是否可行,其次是如何实施。从我在其他一些帖子中看到的情况来看,这应该是可能的,但解决方案似乎对我不起作用。
我编写了以下测试代码,但在测试时收到以下错误:
TypeError: 'numpy.ndarray' 对象不可调用
此错误出现在函数loadInterpolation() 中以zeroVal 开头的代码行上。根据我之前阅读的内容,我希望allow_pickle=True 能够解决这个问题
.
import scipy
from scipy.interpolate import RegularGridInterpolator
def f(x,y,z):
field = -x**2-y**2+z**2
return field
def performSaveInterpolation():
print(scipy.__version__)
print('Performing Interpolation...')
x = np.linspace(-1,1,100)
y = np.linspace(-1,1,100)
z = np.linspace(-1,1,100)
xg, yg ,zg = np.meshgrid(x, y, z, indexing='ij', sparse=True)
data = f(xg,yg,zg)
my_interpolating_function = RegularGridInterpolator((x, y, z), data)
zeroVal = my_interpolating_function([0,0,0])
oneVal = my_interpolating_function([1,1,1])
print('Interpolated function @ (0,0,0): ' + str(zeroVal))
print('Interpolated function @ (1,1,1): ' + str(oneVal))
np.save('interpolation.npy',my_interpolating_function,allow_pickle=True)
return 0
def loadInterpolation():
print('Loading Interpolation...')
interpolationFunc = np.load('interpolation.npy',allow_pickle=True)
zeroVal = interpolationFunc([0,0,0])
oneVal = interpolationFunc([1,1,1])
print('Interpolated function @ (0,0,0): ' + str(zeroVal))
print('Interpolated function @ (1,1,1): ' + str(oneVal))
return 0
performSaveInterpolation()
loadInterpolation()
【问题讨论】:
标签: python numpy scipy interpolation pickle