Python scipy.optimize()值错误:总和的形状不匹配

Python scipy.optimize()值错误:总和的形状不匹配,python,optimization,numpy,scipy,Python,Optimization,Numpy,Scipy,嗨,我是新来的scipy和numpy 我正在尝试用QP来解决课堂作业中的问题 minimize x^t * H * x + f^t * x where x > 0 其中H是一个2 X 2块矩阵,每个元素都是一个k X k维矩阵,并且 x和f为2 x 1向量,每个元素为k维向量 np.shape(H) = (2, 2, k, k) np.shape(x) = (2, k) 我得到一个形状不匹配的错误,即使我认为函数是正确的 以下是我的实现: def func(x): #This

嗨,我是新来的scipy和numpy

我正在尝试用QP来解决课堂作业中的问题

minimize x^t * H * x  + f^t * x 
where x > 0
其中H是一个2 X 2块矩阵,每个元素都是一个k X k维矩阵,并且 x和f为2 x 1向量,每个元素为k维向量

np.shape(H) = (2, 2, k, k)
np.shape(x) = (2, k)
我得到一个形状不匹配的错误,即使我认为函数是正确的

以下是我的实现:

def func(x):    #This function runs perfectly ,returns a value 

    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f)

x_init = np.ones((2, k))

bnds = (0, None)

theta = opt.minimize(func , x_init, bounds = bnds)
# I get an error here. 
# ValueError: shape-mismatch for sum

我错过了什么明显的东西吗

问题是
x_init
opt.minimize
压平。您可以通过在函数内重塑
x
来解决此问题:

def func(x):
    x = x.reshape(2, -1)
    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f)

结果由
theta
捕获,从属性
theta.x
中优化的
x
也被展平,需要相同的整形。

问题是
x_init
opt.minimize
展平。您可以通过在函数内重塑
x
来解决此问题:

def func(x):
    x = x.reshape(2, -1)
    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f)

结果由
theta
和属性
theta.x
中优化的
x
捕获,您将看到该属性也被展平,需要相同的整形。

非常感谢!也许我会在第一时间减少矩阵和向量的维数。非常感谢!也许我最好先降低矩阵和向量的维数。