【发布时间】:2020-05-30 03:37:53
【问题描述】:
我知道savez_compressed可以保存scipy生成的函数。有没有办法保存lambda函数?
尝试:
import numpy as np
from scipy.interpolate import interp1d
xAxis = np.array([1,2,3,4])
data = np.array([1,3,5,6])
yAxisInterp = interp1d(xAxis, data, kind='linear')
np.savez_compressed('myDataLambda.npz', yAxisInterp=yAxisInterp)
print('yAxisInterp is saved')
# Following command does not work
# ------------------------------
yAxisLambda = lambda x : x
np.savez_compressed('myData.npz', yAxisLambda=yAxisLambda)
print('yAxisLambda is saved')
【问题讨论】:
-
其实我搜了一些可以保存功能的包,但是我想问问有没有np.save的选项?
-
yAxisInterp不是函数。它是interp1d类的对象,带有__call__。pickle.dumps(yAxisInterp)与loads一样工作。大概它正在保存您可以使用vars(yAxisInterp)看到的属性。 -
我可以
pickle一个函数,但不能lambda。这意味着我也可以np.save它。但是load必须allow_pickle,检索到的函数会嵌入到一个0d对象dtype数组中。 -
我认为
lambda函数对 python 有不同的行为。感谢您的支持@hpaulj
标签: python python-3.x numpy