【问题标题】:How to perform operations on cvxopt-matrices a la numpy?如何对 cvxopt-matrices a la numpy 执行操作?
【发布时间】:2019-12-18 19:23:54
【问题描述】:

我正在使用 cvxopt 矩阵,以便在 picos 库中使用它们。一般来说,我想取一个矩阵,在某个向量上对其进行评估,减去一些东西,然后取其条目的最大绝对值

import picos as pic
import cvxopt as cvx
import numpy as np

(...)

P = pic.Problem()
theta = P.add_variable('theta', size=k, vtype='continuous', lower=-10, upper=10)
theta

P.add_constraint(max(abs(M*theta - b)) <= 5)
P.minimize(theta)

(这里 b 是一些被视为 cvxopt 矩阵的向量。)但是,我得到的错误如下:

TypeError                                 Traceback (most recent call last)
<ipython-input-11-8884e5cb14dc> in <module>
      3 theta
      4 
----> 5 P.add_constraint(max(abs(M*theta - b.T)) < 45)
      6 P.minimize(theta)
      7 

TypeError: 'Norm' object is not iterable

我想知道是否有另一种方法可以让 cvxopt 接受这些计算?

【问题讨论】:

    标签: python numpy numpy-ndarray cvxopt


    【解决方案1】:

    (除了几年前的小实验外,从未真正使用过这个库)

    看起来罪魁祸首是那些高度复杂的自动转换建模系统工具中隐藏魔法的经典案例。

    • picos 重载 abs in abs(M*theta - b)
      • 见:doc
      • 这会导致类型 Norm(基于 picos 的类型)
    • picos 可能不会在max(abs(M*theta - b.T)) 中超载max
      • python 的 max-operator(不是从 picos 定制的东西!)将被使用,它基于一些可迭代的线性搜索
      • 这里的可迭代对象是Norm 对象;但它不可迭代,因为错误显示

    另见:list of overloaded operators

    在我看来,这个功能max 不见了。您可以手动对其进行线性化,但是……这很烦人。

    如果你不需要 picos 的特殊功能,cvxpy 非常相似,也支持absmax(并且基于 scipy 的 sparse-matrices + numpy-arrays;感谢上帝!)。

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 2014-03-11
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2017-07-03
      • 2011-03-30
      • 1970-01-01
      • 2016-06-30
      相关资源
      最近更新 更多