【发布时间】:2019-08-24 16:25:47
【问题描述】:
我有一系列常数矩阵和一个常数列表。我的目标是找到一个矩阵,它与给定系列中的矩阵相乘的痕迹是给定常数列表的最佳拟合。但我不知道如何将跟踪列表表示为cvxpy 中的表达式。请帮助我,我很感激任何帮助!
我试图将它表示为一个列表,但它不起作用,我不知道将这个列表转换为一个有效的表达式。这是我尝试过的代码和我得到的错误
p_esi = [cp.trace(it*self.dm) for it in M]
objective = cp.Minimize(cp.norm(p_esi))
ValueError Traceback (most recent call last)
<ipython-input-111-707f84b7ac4f> in <module>
8 #res = fid.fidelity(p, p)
9
---> 10 fid.mlh(N, p)
11
12 print(res)
<ipython-input-110-ddfa321a4b30> in mlh(self, N, p_exp)
101
102 m = MLh(N)
--> 103 m.optimization(p_exp, self.out_M)
104
105 return
<ipython-input-109-3e773ae1e745> in optimization(self, p, M)
17
18 constraints = [self.dm >= 0, cp.trace(self.dm)==1]
---> 19 objective = cp.Minimize(cp.norm(p_esi))
20 problem = cp.Problem(objective, constraints)
21
~/anaconda3/lib/python3.7/site-packages/cvxpy/atoms/norm.py in norm(x, p, axis)
45 An Expression representing the norm.
46 """
---> 47 x = Expression.cast_to_const(x)
48 # matrix norms take precedence
49 num_nontrivial_idxs = sum([d > 1 for d in x.shape])
~/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/expression.py in cast_to_const(expr)
444 """Converts a non-Expression to a Constant.
445 """
--> 446 return expr if isinstance(expr, Expression) else cvxtypes.constant()(expr)
447
448 @_cast_other
~/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/constants/constant.py in __init__(self, value)
42 self._sparse = True
43 else:
---> 44 self._value = intf.DEFAULT_INTF.const_to_matrix(value)
45 self._sparse = False
46 self._imag = None
~/anaconda3/lib/python3.7/site-packages/cvxpy/interface/numpy_interface/ndarray_interface.py in const_to_matrix(self, value, convert_scalars)
48 return result
49 else:
---> 50 return result.astype(numpy.float64)
51
52 # Return an identity matrix.
ValueError: setting an array element with a sequence.
【问题讨论】: