我在使用以前版本的 python 时遇到了优化问题...
我有一个功能
fp = lambda c, x: (c[0])+ (c[1]*((1- np.exp(-x/c[4]))/(x/c[4])))+ (c[2]*((((1-np.exp(-x/c[4]))/(x/c[4])))- (np.exp(-x/c[4]))))+ (c[3]*((((1-np.exp(-x/c[5]))/(x/c[5])))- (np.exp(-x/c[5]))))
我需要最小化错误
e = lambda c, x, y: (((fp(c,x)-y)**2).sum())
使用初始参数值
p0 = np.array([0.01,0.01,0.01,0.01,0.01,1.00,1.00])
基本上
p = optimize.fmin(e, p0, args=(x,y))
x 和 y 分别是 np.arrays (14,)。
所以,这曾经有效,但现在它抛出此错误
TypeError: loop of ufunc does not support argument 0 of type float which has no callable exp method
我做了一些研究,似乎存在与
np.exp()
和某些版本的Numpy相关的问题...实际上,当我将Python和Numpy分别更新到3.7和1.18.1时,就出现了这个问题。
有什么想法吗?
或者我刚刚发现我收到了这个错误,因为我将一个整数插入到了一个浮点数数组中,无需牺牲准确性,只需将一个整数转换为浮点数即可工作
问题可能是由于 numpy 数组的元素不是 int 类型引起的。
可以通过将 float 数组转换为 int 数组来解决此问题,但代价是损失一点准确性。这为我解决了这个问题。
import numpy as np
y_int = np.array(y_float, dtype=int)