SciPy三维插值结果保存加载时报TypeError问题求助
报错根因
你使用np.save()存储RegularGridInterpolator实例时,由于该实例不属于numpy原生数组类型,numpy会自动将其包装为一个0维object类型的numpy数组写入文件。加载时直接拿到的是这个包裹了插值器的0维数组,而非插值器本身,因此无法直接作为函数调用,触发'numpy.ndarray' object is not callable报错,和allow_pickle参数是否开启无关。
直接修复方案
加载后调用.item()方法取出0维数组中包裹的插值器实例即可,仅需修改loadInterpolation函数的加载代码:
def loadInterpolation(): print('Loading Interpolation...') # 加载后调用.item()取出实际的插值器对象 interpolationFunc = np.load('interpolation.npy', allow_pickle=True).item() 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
注意:原测试代码未导入numpy,运行前需要补充
import numpy as np语句。
可选优化方案
如果存储的是纯Python对象,直接使用Python标准库的pickle模块读写更直观,可避免numpy的自动包装问题:
- 保存侧代码替换:
import pickle with open('interp.pkl', 'wb') as f: pickle.dump(my_interpolating_function, f)
- 加载侧代码替换:
import pickle with open('interp.pkl', 'rb') as f: interpolationFunc = pickle.load(f)
内容的提问来源于stack exchange,提问作者classAction68
相关产品推荐
相关产品推荐

