python的数据科学计算包numpy几乎可以解决所有的计算问题,使用np.linalg.solve即可解线性方程组。但是最近遇到一个问题,求解Ax=b方程组,如果A是一个很大的稀疏矩阵,numpy初始化矩阵会导致内存不足。例如:
import numpy as np
a = np.zeros([4000000,3000000], dtype=float)
运行代码会报如下错误:
MemoryError: Unable to allocate array with shape (4000000, 3000000) and data type
float64
c++中Eigen库提供了稀疏矩阵创建方法以及相应的线性方程组求解接口。查询资料后了解到python也有scipy包支持创建稀疏矩阵,并且提供了求解线性方程组的接口函数,下文做一整理记录。
核心方法:scipy.sparse.linalg.spsolve
稀疏矩阵结构体:scipy.sparse.csc_matrix
首先,使用三元组构建稀疏矩阵:
import numpy as np
from scipy.sparse import csc_matrix
row = np.array([0, 2, 2, 0, 1, 2, 0])
col = np.array([0, 0, 1, 2, 2, 2, 0])
data = np.array([1, 2, 3, 4, 5, 6, 5])
sp_A = csc_matrix((data, (row, col)), shape=(3, 3), dtype=float)