uda*_*day 2 python numpy cvxopt
这可能是一个非常愚蠢的问题,但我一直在努力,并且在文档中找不到它.
我正在尝试使用此处给出的描述进行二次规划.这里的文档仅涵盖了将2维numpy数组转换为cvxopt数组,而不是1维numpy数组.
我q的目标函数(1/2)x' P x + q' x向量是一个numpy向量,比如大小n.
我尝试q通过以下方式从numpy 转换为cvxopt:
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
Run Code Online (Sandbox Code Playgroud)
在所有情况下,我都会得到答案TypeError: buffer format not supported.
然而,numpy矩阵似乎工作正常,例如
cvx_p = cvx.matrix(p) # works fine, p is a n x n numpy matrix
Run Code Online (Sandbox Code Playgroud)
如果我尝试运行优化而不将numpy向量转换为cvxopt格式,如下所示:
cvxs.qp(cvx_p, cvx_q, cvx_g, cvx_h, cvx_a, cvx_b)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:TypeError 'q' must be a 'd' matrix with one column.
将numpy向量转换为带有一列的cvxopt矩阵的正确方法是什么?
您没有包含任何示例数据,但是当我遇到此错误时,这是因为dtype.
尝试:
q = q.astype(np.double)
cvx_q = matrix(q)
Run Code Online (Sandbox Code Playgroud)
CVX只接受双打,而不是整数.
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |