我遇到了一个优化问题,这个优化曾经与以前版本的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。
所以,这曾经工作,但现在它抛出这个错误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时。
有什么想法吗?
2条答案
按热度按时间ie3xauqp1#
或者我只是发现我得到了那个错误,因为我把一个整数插入到一个浮点数数组中,不需要牺牲精度,只是把一个整数变成一个浮点数,它的工作
v6ylcynt2#
这个问题可能是因为numpy数组的元素不是int类型。
这个问题可以通过把你的浮点数组转换成整型数组来解决,代价是损失一点精度。