Scipy 按元素最小化 objective
Scipy minimize objective element-wise
我正在尝试将 scipy 最小化器应用于将多个 np.arrays 作为参数的矢量化 objective 函数。在这个例子中,我想相对于 x
按元素最小化 obj(x,p)
,同时将 p
固定。对于 p = np.array([2,3,4])
,最小值应为 2、3 和 4。
但是
import numpy as np
from numba import vectorize, float64
from scipy.optimize import minimize
xinit = np.array([1,1,1])
p = np.array([2,3,4])
@vectorize([float64(float64,float64)])
def obj(x,p):
return((x-p)**2)
minimize(obj, x0 = xinit,args = p, method='Nelder-Mead')
returns一个ValueError: setting an array element with a sequence.
谁能帮忙?
提前致谢!
目前尚不清楚您要实现的目标:(x-p)**2
是一个数组,因此将其用作 objective 不是明确定义的操作(因为没有合理的顺序使用)。也许您真的想要两个参数之间的平方距离? IE。相当于
def obj(x, p):
return np.linalg.norm(x-p)**2
这会起作用并找到合适的最小值,但此时 vectorize
签名不再有效;如果您愿意,可调用对象仍然可以使用 Numba 进行 JIT 编译。
我正在尝试将 scipy 最小化器应用于将多个 np.arrays 作为参数的矢量化 objective 函数。在这个例子中,我想相对于 x
按元素最小化 obj(x,p)
,同时将 p
固定。对于 p = np.array([2,3,4])
,最小值应为 2、3 和 4。
但是
import numpy as np
from numba import vectorize, float64
from scipy.optimize import minimize
xinit = np.array([1,1,1])
p = np.array([2,3,4])
@vectorize([float64(float64,float64)])
def obj(x,p):
return((x-p)**2)
minimize(obj, x0 = xinit,args = p, method='Nelder-Mead')
returns一个ValueError: setting an array element with a sequence.
谁能帮忙?
提前致谢!
目前尚不清楚您要实现的目标:(x-p)**2
是一个数组,因此将其用作 objective 不是明确定义的操作(因为没有合理的顺序使用)。也许您真的想要两个参数之间的平方距离? IE。相当于
def obj(x, p):
return np.linalg.norm(x-p)**2
这会起作用并找到合适的最小值,但此时 vectorize
签名不再有效;如果您愿意,可调用对象仍然可以使用 Numba 进行 JIT 编译。