Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.optimize.minimize抛出错误“;ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all();_Python_Scipy Optimize - Fatal编程技术网

Python scipy.optimize.minimize抛出错误“;ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all();

Python scipy.optimize.minimize抛出错误“;ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all();,python,scipy-optimize,Python,Scipy Optimize,这是触发问题的代码: 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, :].transp

这是触发问题的代码:

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.58613179, -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.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, pcov = minimize(ellipse_func, p0, 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
“C:\Users\X\PycharmProjects\lissajous-achse\venv\Scripts\python.exe”“C:/Users/X/PycharmProjects/lissajous-achse/eliple_-fit.py”
回溯(最近一次呼叫最后一次):
文件“C:/Users/X/PycharmProjects/lissajous-achse/eliple_-fit.py”,第57行,in
main()
文件“C:/Users/X/PycharmProjects/lissajous-achse/ellipse_-fit.py”,第53行,主视图
打印(str(从块(数据)中查找短轴的向量)
文件“C:/Users/X/PycharmProjects/lissajous-achse/ellipse_-fit.py”,第29行,从_块中查找_短轴_的_向量_
popt,pcov=最小化(椭圆函数,p0,args=数据)
文件“C:\Users\X\PycharmProjects\lissajous-achse\venv\lib\site-packages\scipy\optimize\\u-minimize.py”,最小化中第604行
return _minimize_bfgs(fun、x0、args、jac、callback、**选项)
文件“C:\Users\X\PycharmProjects\lissajous-achse\venv\lib\site-packages\scipy\optimize\optimize.py”,第1063行,在bfgs中
如果isinf(rhok):#这是numpy的补丁
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
进程已完成,退出代码为1
我试图在回溯中(使用
np.any()
np.all()
)对
ellipse\u func
的返回值采纳建议,但刚刚得到下一个内部scipy错误

我可以做些什么来运行我的优化?除了
minimize()
,我还愿意使用其他函数