首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对cvxopt矩阵进行操作?

如何对cvxopt矩阵进行操作?
EN

Stack Overflow用户
提问于 2019-12-18 19:23:54
回答 1查看 253关注 0票数 1

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

代码语言:javascript
复制
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矩阵处理的一些向量。)但是,我得到的错误如下:

代码语言:javascript
复制
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接受?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-18 19:33:51

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

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

  • picos 重载abs(M*theta - b) 中的abs
    • 请参阅:文档
    • 这导致类型Norm (基于picos的类型)。

  • max max(abs(M*theta - b.T)) 中,picos可能不会超载
    • python的max-操作符(不是从picos定制的!)将使用基于线性搜索的某些可迭代的方法。
    • 这里的可迭代对象是Norm对象;但是它不能像错误显示的那样迭代

另见:重载运算符列表

在我看来,这个特性max缺失了。你可以手动线性化,但是.太烦人了。

如果您不需要一些特殊的picos,cvxpy是非常相似的,并且也支持absmax (并且是基于scipy的稀疏矩阵+numpy-数组;谢天谢地!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59398822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档