Python CVXOPT QP解算器:类型错误:';A';必须是';d';1000列矩阵

Python CVXOPT QP解算器:类型错误:';A';必须是';d';1000列矩阵,python,svm,typeerror,cvxopt,quadratic-programming,Python,Svm,Typeerror,Cvxopt,Quadratic Programming,我试图使用CVXOPT qp解算器来计算支持向量机的拉格朗日乘数 def svm(X, Y, c): m = len(X) P = matrix(np.dot(Y, Y.T) * np.dot(X, X.T)) q = matrix(np.ones(m) * -1) g1 = np.asarray(np.diag(np.ones(m) * -1)) g2 = np.asarray(np.diag(np.ones(m))) G

我试图使用CVXOPT qp解算器来计算支持向量机的拉格朗日乘数

def svm(X, Y, c):
      m = len(X)
      P = matrix(np.dot(Y, Y.T) * np.dot(X, X.T))
      q = matrix(np.ones(m) * -1)
      g1 = np.asarray(np.diag(np.ones(m) * -1))
      g2 = np.asarray(np.diag(np.ones(m)))
      G = matrix(np.append(g1, g2, axis=0))
      h = matrix(np.append(np.zeros(m), (np.ones(m) * c), axis =0))
      A = np.reshape((Y.T), (1,m))
      b = matrix([0])

      print (A).shape

      A = matrix(A)

      sol = solvers.qp(P, q, G, h, A, b)
      print sol
此处
X
1000 X 2
矩阵,
Y
具有相同数量的标签。解算器抛出以下错误:
$python svm.py
(1, 1000)
回溯(最近一次呼叫最后一次):
文件“svm.py”,第35行,在
支持向量机(X,Y,50)
svm中第29行的文件“svm.py”
sol=解算器.qp(P,q,G,h,A,b)
qp中的文件“/usr/local/lib/python2.7/site packages/cvxopt/coneprog.py”,第4468行
返回coneqp(P,q,G,h,None,A,b,initvals,options=options)
coneqp中的文件“/usr/local/lib/python2.7/site packages/cvxopt/coneprog.py”,第1914行
%q、 大小[0])
TypeError:“A”必须是1000列的“d”矩阵


我打印了A的形状,它是一个
(11000)
矩阵,在从向量重新整形后。究竟是什么原因导致此错误?

您的矩阵元素也必须是浮点类型。因此,通过使用
A=A.astype('float')
来强制转换该错误,从而消除该错误。

错误-
“TypeError:'A'必须是1000列的“d”矩阵:“
有两个条件,即:

  • 如果类型代码不等于'
    d
    '
  • 如果
    A.size[1]!=c、 大小[0]

    检查这些条件。

    我尝试了
    A=A.astype(double)
    来解决它,但它是无效的,因为python不知道double是什么,或者A没有astype方法

    因此 通过使用
    
    A=矩阵(A,(1,m),‘d’)
    

    实际上可以解决这个问题

    也试着打印A.typecode,是“d”吗?如果不是,试着在将其转换为矩阵之前执行A=A.astype(double)。就是这样。类型是“i”。在
    矩阵中添加了tc变量(A,(1,m),'d')
    ,它成功了!如果你想添加它作为答案,我可以接受!你的意思是A=A.astype(float)