Skip to main content
 首页 » 编程设计

python之如何最好地存储 Python 对象以供以后评估

2025年05月04日12jpfss

我使用 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 文件。