Python scipy中的行搜索示例

Python scipy中的行搜索示例,python,scipy,Python,Scipy,我正在搜索使用scipy.optimize.line\u search的示例。我真的不明白这个函数如何处理多变量函数。我写了一个简单的例子 import scipy as sp import scipy.optimize def test_func(x): return (x[0])**2+(x[1])**2 def test_grad(x): return [2*x[0],2*x[1]] sp.optimize.line_search(test_func,test_grad

我正在搜索使用
scipy.optimize.line\u search
的示例。我真的不明白这个函数如何处理多变量函数。我写了一个简单的例子

import scipy as sp
import scipy.optimize
def test_func(x):
    return (x[0])**2+(x[1])**2

def test_grad(x):
    return [2*x[0],2*x[1]]

sp.optimize.line_search(test_func,test_grad,[1.8,1.7],[-1.0,-1.0])
我有

File "D:\Anaconda2\lib\site-packages\scipy\optimize\linesearch.py", line 259, in phi
return f(xk + alpha * pk, *args)
TypeError: can't multiply sequence by non-int of type 'float'

您需要提交numpy数组而不是列表:

import numpy as np
sp.optimize.line_search(test_func,test_grad,np.array([1.8,1.7]),np.array([-1.,-1.]))

[1.8,1.7]、-1.0、-1.0]应为ndarray类型;它是否有助于将它们转换为numpy阵列?还有,为什么不使用实数梯度函数呢?你说的是梯度的数值还是测试梯度函数?我说的是梯度函数。计算导数应该完全去除平方项。编辑:我看你们已经修好了。主要问题是,为什么alpha是标量,而不是ndarray?读到Wolfe条件,我想,alpha必须和xk具有相同的维度。不,alpha是步长。作为参数给出的pk是向量。检查详细信息。它对于一个变量函数是正确的。但是如果我们想最小化f(x,y),x,y-两个向量(矩阵)具有不同的长度(维数)?