Scipy最小化目标元素

时间:2018-12-16 16:52:41

标签: python scipy vectorization minimize

我正在尝试将scipy最小化器应用于采用多个np.arrays作为参数的矢量化目标函数。在此示例中,我想相对于obj(x,p)最小化x,同时将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')

返回一个ValueError: setting an array element with a sequence.

谁可以提供帮助?

非常感谢!

1 个答案:

答案 0 :(得分:1)

目前尚不清楚您要实现的目标:(x-p)**2是一个数组,因此将其用作目标不是明确定义的操作(因为没有合理的使用顺序)。也许您实际上想要两个参数之间的平方距离?即等于

def obj(x, p):
    return np.linalg.norm(x-p)**2

这将起作用并找到适当的最小值,但是此时vectorize签名不再有效;如果需要的话,仍然可以使用Numba对其进行JIT编译。