我使用 scipy 函数编写了以下 python 代码。函数 f 的特定形式无关紧要。
import numpy as np
from scipy.interpolate.interpnd import LinearNDInterpolator
def f(x, y):
s = np.hypot(x, y)
phi = np.arctan2(y, x)
tau = s + s*(1-s)/5 * np.sin(6*phi)
return 5*(1-tau) + tau
npts = 200
px, py = np.random.choice(x, npts), np.random.choice(y, npts)
ip = LinearNDInterpolator((px, py), f(px,py))
ip 是什么对象?我想将它存储在一个文件中并稍后对其进行评估,如下例所示。
x = np.linspace(-1,1,100)
y = np.linspace(-1,1,100)
X, Y = np.meshgrid(x,y)
Ti = ip((X, Y))
在文件中存储对象 ip 的好方法是什么?
请您参考如下方法:
您的对象 ip 是类 scipy.interpolate.interpnd.LinearNDInterpolator 的一个实例。如果你想将完整的对象存储到文件中,那么你可以使用 pickle来自 python 标准库的模块。
挑选一个对象并将其写入(二进制)文件非常简单:
import pickle
with open('data.pickle', 'wb') as f:
# Write object `ip` to file
pickle.dump(ip, f, pickle.HIGHEST_PROTOCOL)
稍后从文件中再次加载对象同样简单:
with open('data.pickle', 'rb') as f:
# Read out object `ip` from file
ip = pickle.load(f)
酸洗确实有一些值得一提的缺点。首先,您编写的 pickle 文件不是人类可读的。其次,由于存在安全风险,不应加载从不受信任的来源接收的 pickle 文件。
