【发布时间】:2018-11-24 07:37:12
【问题描述】:
我有一个依赖于外部产品总和的目标函数。如果我可以使用 Numpy 函数,我会这样写:
A = np.ones(m, n)
U = Variable(m, n)
objective = np.trace(sum([np.outer(A[i,:], U[i,:]) for i in range(m)]))
当然,当 U 是变量时,np.outer 不起作用。是否有一个 cvxpy 仿射函数可以实现这个?
【问题讨论】:
我有一个依赖于外部产品总和的目标函数。如果我可以使用 Numpy 函数,我会这样写:
A = np.ones(m, n)
U = Variable(m, n)
objective = np.trace(sum([np.outer(A[i,:], U[i,:]) for i in range(m)]))
当然,当 U 是变量时,np.outer 不起作用。是否有一个 cvxpy 仿射函数可以实现这个?
【问题讨论】:
cvxpy 有一个可以工作的 kron 函数。由于它仅适用于 2d 变量和 2d 数组,因此您必须先将向量重塑为 (n, 1) 个向量:
cvx.trace(sum([cvx.kron(A[i, :].reshape(n,1), cvx.reshape(U[i,:], (n,1))
for i in range(m)]))
另一种解决方案是简单地编写矩阵乘积:
cvx.trace(sum([A[i, :].reshape(n, 1) @ cvx.reshape(U[i,:], (1, n)
for i in range(m)]))
【讨论】: