Python scipy.optimize()值错误:总和的形状不匹配
嗨,我是新来的scipy和numpy 我正在尝试用QP来解决课堂作业中的问题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
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
捕获,您将看到该属性也被展平,需要相同的整形。非常感谢!也许我会在第一时间减少矩阵和向量的维数。非常感谢!也许我最好先降低矩阵和向量的维数。