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()
,我还愿意使用其他函数