numpy ufunc的循环不支持没有可调用exp方法的float类型的参数0

rqcrx0a6  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(570)

我遇到了一个优化问题,这个优化曾经与以前版本的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时。
有什么想法吗?

ie3xauqp

ie3xauqp1#

或者我只是发现我得到了那个错误,因为我把一个整数插入到一个浮点数数组中,不需要牺牲精度,只是把一个整数变成一个浮点数,它的工作

v6ylcynt

v6ylcynt2#

这个问题可能是因为numpy数组的元素不是int类型。
这个问题可以通过把你的浮点数组转换成整型数组来解决,代价是损失一点精度。

import numpy as np

y_int = np.array(y_float, dtype=int)

相关问题