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)]))
我有一个 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)]))