通过scipy.optimize.fmin从numpy.root发送的错误

通过scipy.optimize.fmin从numpy.root发送的错误,numpy,scipy,Numpy,Scipy,因此,我正在使用一个处理多项式根的函数,我想找到这类函数的最小点(例如通过fmin): 因此,理想情况下,我应该能够通过上述代码的最后一行输入此函数,但它会返回一个错误: File "<ipython-input-163-c7353335fcca>", line 5, in sumroots z = np.roots([c0, c1, c2]) File "C:\Users\user\Anaconda3\lib\site-packages\numpy\lib\pol

因此,我正在使用一个处理多项式根的函数,我想找到这类函数的最小点(例如通过fmin):

因此,理想情况下,我应该能够通过上述代码的最后一行输入此函数,但它会返回一个错误:

  File "<ipython-input-163-c7353335fcca>", line 5, in sumroots
    z = np.roots([c0, c1, c2])

  File "C:\Users\user\Anaconda3\lib\site-packages\numpy\lib\polynomial.py", line 209, in roots
    raise ValueError("Input must be a rank-1 array.")

ValueError: Input must be a rank-1 array.
文件“”,第5行,在sumroots中
z=np.根([c0,c1,c2])
文件“C:\Users\user\Anaconda3\lib\site packages\numpy\lib\polynomy.py”,第209行,根目录
raise VALUERROR(“输入必须是秩1数组”)
ValueError:输入必须是秩1数组。
提前感谢您的时间和帮助。

错误消息

ValueError: Input must be a rank-1 array.
提示我们正在向一个函数传递一个值,该函数需要一个秩1数组,但 他得到了别的东西。回溯错误消息显示问题已解决 在
sumrots
函数中发生。我们不直接调用
sumroots
函数
fmin
为我们调用
sumroots
。因此,为了研究
fmin
如何调用
sumroots
,让我们在函数中放入一条print语句:

def sumroots(t):
    print(type(t), t)
    c0 = t*np.exp(-t)
    ...
现在运行代码打印

<class 'numpy.ndarray'> [ 1.]
而且,
np.roots
需要一个数组,而不是数组列表。由于NumPy数组
t
的长度为1,因此我们可以使用其:

印刷品

Optimization terminated successfully.
         Current function value: 4.857178
         Iterations: 14
         Function evaluations: 28
[ 0.61806641]

非常感谢您的回复,它确实有效。但是,通过修改t=t.item(),如果t是一个float(AttributeError:“float”对象没有属性“item”),则函数现在无法生成结果。有没有更简单的方法来处理这个问题,或者我必须忍受设置一个逻辑门?您可以保持
sumrots
原样,并将
lambda t:sumrots(t.item())
传递到
optimize.fmin
。我已经修改了上面的帖子来表达我的意思。
In [164]: sumroots(np.array([1]))
...
ValueError: Input must be a rank-1 array.
import numpy as np
import scipy.optimize as optimize

def sumroots(t):
    c0 = t*np.exp(-t)
    c1 = t+1
    c2 = t+2
    z = np.roots([c0, c1, c2])
    return np.abs(np.sum(z))

print(optimize.fmin(lambda t: sumroots(t.item()), 1))
Optimization terminated successfully.
         Current function value: 4.857178
         Iterations: 14
         Function evaluations: 28
[ 0.61806641]