python - 在Python中生成非奇异稀疏矩阵

标签 python numpy matrix scipy

当稀疏矩阵由 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/

相关文章:

python - 如何在python中的sklearn中获取GridSearchCV中的选定特征

r - 根据确切的行/列名称插入矩阵值

c++ - 从文件中读取行数并在 C++ 中的函数中使用它

python - Numpy 检查是否存在每行 < 0 的解决方案?

python - python中的分组列表元素

python-pptx:如何重新定位图片占位符?

python - 使用指定的 css Markdown 到 html

python - 对称数组与 NumPy 的卷积 : why is the result shifted?

python - 使用组合键合并字典

python - 如何用代码更改Mayavi中的字体类型和大小?