Наружный продукт в CVXPY - PullRequest
       5

Наружный продукт в CVXPY

0 голосов
/ 24 ноября 2018

У меня есть целевая функция, которая зависит от суммы внешних произведений.Если бы я мог использовать функции 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, которая бы это реализовала?

1 Ответ

0 голосов
/ 24 ноября 2018

У cvxpy есть функция kron, которая работает.Поскольку он работает только с 2d-переменными и 2-мерными массивами, сначала нужно изменить форму векторов на (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)]))
...