CVXPY 中的外积

Outer product in CVXPY

我有一个 objective 函数,它依赖于外积的总和。如果我可以使用 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)]))

当然 np.outer 当 U 是变量时不起作用。是否有可以实现此功能的 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)]))