这可能是一个非常愚蠢的问题,但我一直在挣扎,在文档中找不到它。
我正在尝试使用这里的描述进行二次规划。这里的文件只包含将二维numpy数组转换为cvxopt数组,而不是一维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在所有情况下,我都得到了TypeError: buffer format not supported的答案。
然而,numpy矩阵似乎工作得很好。
cvx_p = cvx.matrix(p) # works fine, p is a n x n numpy matrix如果我试图运行优化,而不将numpy向量转换为cvxopt格式,如下所示:
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矩阵?
发布于 2015-10-31 10:33:15
您没有包含任何示例数据,但当我遇到此错误时,是因为dtype。
尝试:
q = q.astype(np.double)
cvx_q = matrix(q)CVX只接受双倍,不接受ints。
发布于 2020-03-08 20:22:27
其中一个关键错误是假设CVX接受int,这是不正确的。CVX只接受双倍。所以,正确的方法也许是:
import cvxopt as cp
if not isinstance(q, np.double):
q.astype(np.double)
cvx_q = cp.matrix(q) https://stackoverflow.com/questions/33423081
复制相似问题