首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将numpy向量转换为cvxopt

将numpy向量转换为cvxopt
EN

Stack Overflow用户
提问于 2015-10-29 19:31:58
回答 2查看 7K关注 0票数 3

这可能是一个非常愚蠢的问题,但我一直在挣扎,在文档中找不到它。

我正在尝试使用这里的描述进行二次规划。这里的文件只包含将二维numpy数组转换为cvxopt数组,而不是一维numpy数组。

我的目标函数的q向量(1/2)x' P x + q' x是一个numpy向量,比方说n大小。

我试图通过以下方式将q从numpy转换为cvxopt:

代码语言:javascript
复制
import cvxopt as cvx
cvx_q = cvx.matrix(q)   # didn't work
cvx_q = cvx.matrix(q, (n, 1)) # didn't work
cvx_q = cvx.matrix(np.array([q])) # didn't work
cvx_q = cvx.matrix(np.array([q]), (1, n)) # didn't work
cvx_q = cvx.matrix(np.array([q]), (n, 1)) # didn't work

在所有情况下,我都得到了TypeError: buffer format not supported的答案。

然而,numpy矩阵似乎工作得很好。

代码语言:javascript
复制
cvx_p = cvx.matrix(p)   # works fine, p is a n x n numpy matrix

如果我试图运行优化,而不将numpy向量转换为cvxopt格式,如下所示:

代码语言:javascript
复制
cvxs.qp(cvx_p, cvx_q, cvx_g, cvx_h, cvx_a, cvx_b)

我得到了一个错误:TypeError 'q' must be a 'd' matrix with one column

怎样才能正确地将一个numpy向量转换成一个只包含一列的cvxopt矩阵?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-31 10:33:15

您没有包含任何示例数据,但当我遇到此错误时,是因为dtype。

尝试:

代码语言:javascript
复制
q = q.astype(np.double)
cvx_q = matrix(q)

CVX只接受双倍,不接受ints。

票数 6
EN

Stack Overflow用户

发布于 2020-03-08 20:22:27

其中一个关键错误是假设CVX接受int,这是不正确的。CVX只接受双倍。所以,正确的方法也许是:

代码语言:javascript
复制
import cvxopt as cp
if not isinstance(q, np.double): 
  q.astype(np.double)
cvx_q = cp.matrix(q) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33423081

复制
相关文章

相似问题

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