转换为稀疏矩阵

2024-06-02 09:16:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一个求解器ecos来解决QP问题 问题是,这个解算器不能承认我的矩阵是稀疏矩阵,我想知道我应该如何修正它

这是矩阵设置的代码

import numpy as np
matrixSize = 10  
Qa= np.random.rand(matrixSize, matrixSize) 
Q_1 = np.dot(Qa, Qa.transpose()) 
print(Q_1)
np.linalg.cholesky(Q_1)
p_1= np.random.uniform(0, 9, size=10)
G_1 = np.diag(-1*np.random.uniform(0, 9, size=10))
h_1 = np.random.uniform(-9, 9, size=10) 
np.savez_compressed(r'C:\Users\skqkr\Desktop\Semesterarbeit/Chiwan_Q1', 
Q=Q_1, p=p_1, G=G_1, h=h_1)

现在是ecos解算器的代码

import ecos 
import time 
import numpy as np   
from scipy import sparse 
Matrix10 = np.load(r'C:\Users\skqkr\Desktop\Semesterarbeit/Chiwan_Q1.npz') 
start = time.time()

P = 2*(Matrix10['Q'])  # quick way to build a symmetric matrix 
q =Matrix10['p']
 
G_1= Matrix10['G'] ## sparsematrix?? 
G= sparse.bsr_matrix(G_1)  
 
h = Matrix10['h']
solution = ecos.solve(P,q,G,h) 
print("QP solution: x = {}".format(x))
print("time :", time.time() - start)

TypeError: G is required to be a sparse matrix

我在变量G处使用了稀疏矩阵,但它没有被确认为稀疏矩阵。我如何解决这个问题


1条回答
网友
1楼 · 发布于 2024-06-02 09:16:00

根据ecos文档,调用签名是

solution = ecos.solve(c,G,h,dims,A,b,**kwargs)

其中GA是稀疏的

但是你用

solution = ecos.solve(P,q,G,h) 

您的q位于G's插槽中。难怪它在抱怨

再读一遍这些文件。这应该是第一步,而不是第一步

相关问题 更多 >