将 numpy 向量转换为 cvxopt
converting numpy vector to cvxopt
这可能是一个非常愚蠢的问题,但我一直在努力解决这个问题并且在文档中找不到它。
我正在尝试使用 description given here. The documentation here 进行二次规划,仅涵盖将二维 numpy 数组转换为 cvxopt 数组,而不是一维 numpy 数组。
objective 函数 (1/2)x' P x + q' x
的 q
向量是一个 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 矩阵的正确方法是什么?
你没有包含任何示例数据,但当我遇到这个错误时,是因为数据类型。
尝试:
q = q.astype(np.double)
cvx_q = matrix(q)
CVX 只接受双精度数,不接受整数。
一个关键错误是您假设 CVX 接受 int,这是不正确的。 CVX 只接受双倍。所以,正确的做法可能是:
import cvxopt as cp
if not isinstance(q, np.double):
q.astype(np.double)
cvx_q = cp.matrix(q)
这可能是一个非常愚蠢的问题,但我一直在努力解决这个问题并且在文档中找不到它。
我正在尝试使用 description given here. The documentation here 进行二次规划,仅涵盖将二维 numpy 数组转换为 cvxopt 数组,而不是一维 numpy 数组。
objective 函数 (1/2)x' P x + q' x
的 q
向量是一个 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 矩阵的正确方法是什么?
你没有包含任何示例数据,但当我遇到这个错误时,是因为数据类型。
尝试:
q = q.astype(np.double)
cvx_q = matrix(q)
CVX 只接受双精度数,不接受整数。
一个关键错误是您假设 CVX 接受 int,这是不正确的。 CVX 只接受双倍。所以,正确的做法可能是:
import cvxopt as cp
if not isinstance(q, np.double):
q.astype(np.double)
cvx_q = cp.matrix(q)