scipy.optimize.minimize引发错误“ ValueError:具有多个元素的数组的真值不明确请使用a.any或a.all”

问题描述

这是触发问题的代码

import numpy as np
from scipy.optimize import minimize


def find_vector_of_minor_axis_from_chunk(data):
    n = 20  # number of points
    guess_center_point = data.mean(1)
    guess_center_point = guess_center_point[np.newaxis,:].transpose()
    guess_a_phase = 0.0
    guess_b_phase = 0.0
    guess_a_axis_vector = np.array([[1.0],[0.0],[0.0]])
    guess_b_axis_vector = np.array([[0.0],[1.0],[0.0]])

    p0 = np.array([guess_center_point,guess_a_axis_vector,guess_a_phase,guess_b_axis_vector,guess_b_phase])

    def ellipse_func(x,data):
        center_point = x[0]
        a_axis_vector = x[1]
        a_phase = x[2]
        b_axis_vector = x[3]
        b_phase = x[4]
        t = np.linspace(0,2 * np.pi,n)
        error = center_point + a_axis_vector * np.sin(t * a_phase) + b_axis_vector * np.sin(t + b_phase) - data
        error_sum = np.sum(error ** 2)
        return np.any(error_sum)

    popt,pcov = minimize(ellipse_func,p0,args=data)
    center_point,a_axis_vector,a_phase,b_axis_vector,b_phase = popt

    print(str(a_axis_vector + "," + b_axis_vector))
    shorter_vector = a_axis_vector
    if np.abs(a_axis_vector) > np.aps(b_axis_vector):
        shorter_vector = b_axis_vector
    return shorter_vector


def main():
    data = np.array([[-4.62767933,-4.6275775,-4.62735346,-4.62719652,-4.62711625,-4.62717975,-4.62723845,-4.62722407,-4.62713901,-4.62708749,-4.62703238,-4.62689101,-4.62687185,-4.62694013,-4.62701082,-4.62700483,-4.62697488,-4.62686825,-4.62675683,-4.62675204],[-1.58625998,-1.58625039,-1.58619648,-1.58617611,-1.58620606,-1.5861833,-1.5861821,-1.58619169,-1.58615814,-1.58616893,-1.58613179,-1.58615934,-1.58611262,-1.58610782,-1.58614017,-1.58613059,-1.58612699,-1.58607428,-1.58610183],[-0.96714786,-0.96713827,-0.96715984,-0.96715145,-0.96716703,-0.96712869,-0.96716104,-0.96713228,-0.96719698,-0.9671838,-0.96717062,-0.96715744,-0.96707717,-0.96709275,-0.96706519,-0.96715026,-0.96711791,-0.96713588,-0.96714786]])

    print(str(find_vector_of_minor_axis_from_chunk(data)))


if __name__ == '__main__':
    main()

这是它的回溯:

"C:\Users\X\PycharmProjects\lissajous-achse\venv\Scripts\python.exe" "C:/Users/X/PycharmProjects/lissajous-achse/ellipse_fit.py"
Traceback (most recent call last):
  File "C:/Users/X/PycharmProjects/lissajous-achse/ellipse_fit.py",line 57,in <module>
    main()
  File "C:/Users/X/PycharmProjects/lissajous-achse/ellipse_fit.py",line 53,in main
    print(str(find_vector_of_minor_axis_from_chunk(data)))
  File "C:/Users/X/PycharmProjects/lissajous-achse/ellipse_fit.py",line 29,in find_vector_of_minor_axis_from_chunk
    popt,args=data)
  File "C:\Users\X\PycharmProjects\lissajous-achse\venv\lib\site-packages\scipy\optimize\_minimize.py",line 604,in minimize
    return _minimize_bfgs(fun,x0,args,jac,callback,**options)
  File "C:\Users\X\PycharmProjects\lissajous-achse\venv\lib\site-packages\scipy\optimize\optimize.py",line 1063,in _minimize_bfgs
    if isinf(rhok):  # this is patch for numpy
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Process finished with exit code 1

我试图在回溯中建议使用np.any()的返回值(使用np.all()ellipse_func,但仅收到下一个内部scipy错误

>

我该怎么做才能使优化运行?我愿意使用minimize()以外的其他功能

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)