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

问题描述 投票:0回答:2

我在使用以前版本的 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时,就出现了这个问题。

有什么想法吗?

python numpy scipy-optimize numpy-ufunc
2个回答
0
投票

或者我刚刚发现我收到了这个错误,因为我将一个整数插入到了一个浮点数数组中,无需牺牲准确性,只需将一个整数转换为浮点数即可工作


-2
投票

问题可能是由于 numpy 数组的元素不是 int 类型引起的。

可以通过将 float 数组转换为 int 数组来解决此问题,但代价是损失一点准确性。这为我解决了这个问题。

import numpy as np

y_int = np.array(y_float, dtype=int)
© www.soinside.com 2019 - 2024. All rights reserved.