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

时间:2013-11-03 10:12:07

标签: python optimization numpy scipy

嗨,我是scipy和numpy的新手,

我正在尝试使用解决QP问题进行课堂作业

minimize x^t * H * x  + f^t * x 
where x > 0

其中H是2×2块矩阵,其中每个元素是k×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

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

问题是x_initopt.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和属性x中的优化theta.x捕获,您将看到它也会被展平,需要相同的重塑。