当稀疏矩阵由 scipy.sparse.rand
生成时,它可以是单数。事实上,下面的代码会引发错误 "RuntimeError: superlu failure (singular matrix?) at line 100 in file scipy/sparse/linalg/dsolve/SuperLU/SRC/dsnode_bmod.c"
.
dim = 20000
ratio = 0.000133
A = scipy.sparse.rand(dim,dim,ratio)
inv_sparse = scipy.sparse.linalg.inv(A)
有没有办法生成非奇异稀疏矩阵?
我真正想做的是比较 scipy.sparse.linalg.inv
的性能(处理时间)与 np.linalg.inv
。这就是为什么我需要生成非奇异的随机稀疏矩阵。
最佳答案
矩阵的密度ratio = 0.000133
非常低。这意味着 7518 项中大约有一项是非空的。因此,每一项为空的概率约为 7517/7518。
每行由 20000 个独立术语组成。所以一行为空的概率是(7517/7518)^20000=6.99%。因此,一行非空的概率为 1-(7517/7518)^20000=93.0%。
那么,矩阵由20000行组成。这些行可以被认为是独立的。因此,矩阵不包含空行的概率为 (1-(7517/7518)^20000)^20000=(93.0%)^20000。这个概率很低。
由于矩阵很可能包含空行,因此它通常是奇异的。
此外,由于 float 的精度有限,程序通常将病态矩阵视为奇异矩阵。事实上,在这种情况下,计算出的逆将非常不精确且毫无意义。
最后,为了比较反函数,最好使用已知可逆的矩阵......至少,您可以尝试增加密度,使空行的概率变得非常低。
关于python - 在Python中生成非奇异稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39672554/