Python-将稀疏矩阵行与非稀疏向量乘以索引

Python-将稀疏矩阵行与非稀疏向量乘以索引,python,numpy,matrix,scipy,numerical-methods,Python,Numpy,Matrix,Scipy,Numerical Methods,我当前的软件项目涉及使用python实现一种求解线性系统的数值方法(所谓的SOR-method)。 它基本上是这样工作的: 给定一个线性系统: ax1 + bx2 + cx3 = b1 dx1 + ex2 + fx3 = b2 gx1 + hx2 + ix3 = b3 将方程式重新排列为: x1_new = (b1 - (bx2 + cx3)) / a x2_new = (b2 - (dx1_new + fx3)) / e x3_new = (b3 - (gx1_new + hx2_new))

我当前的软件项目涉及使用python实现一种求解线性系统的数值方法(所谓的
SOR
-method)。 它基本上是这样工作的:

给定一个线性系统:

ax1 + bx2 + cx3 = b1
dx1 + ex2 + fx3 = b2
gx1 + hx2 + ix3 = b3
将方程式重新排列为:

x1_new = (b1 - (bx2 + cx3)) / a
x2_new = (b2 - (dx1_new + fx3)) / e
x3_new = (b3 - (gx1_new + hx2_new)) / i
正如您所看到的,
x*_new
值随着每一行而更新-这就是为什么我不能使用简单的向量prodcuts的不幸原因(我还必须除以对角线元素-而不是乘以它)。我必须一个元素一个元素去

我想使用稀疏矩阵。但是我还没有找到一种方法来索引稀疏矩阵,以及如何执行上面描述的操作?比如,我发现的唯一一件事(关于这一点)是使用
A[I].data
,它返回行
I
的非零元素。但是一行中可能有很多零。而且使用大量if/else来获取索引处的元素对于
100.000 x 100.000
矩阵也不是很有效


有什么想法吗?

A[i]
是一个新的稀疏矩阵(不是
视图
A[i]。A
是该矩阵的密集版本,所有的零都被恢复。(
lil
格式确实有稀疏行视图的版本)。处理稀疏矩阵的元素、行或列是没有效率的,除非你愿意直接处理
数据、索引、indptr
属性。@hpaulj你知道
A[i,j]
做什么吗?因为不知何故,这正是我所需要的。