Python CVXOPT QP解算器:类型错误:';A';必须是';d';1000列矩阵
我试图使用CVXOPT qp解算器来计算支持向量机的拉格朗日乘数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
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)