2016-09-24 74 views
1

,也可以是單數。實際上,下面的代碼會產生一個錯誤"RuntimeError: superlu failure (singular matrix?) at line 100 in file scipy/sparse/linalg/dsolve/SuperLU/SRC/dsnode_bmod.c"生成非奇異稀疏矩陣在Python

dim = 20000 
ratio = 0.000133 

A = scipy.sparse.rand(dim,dim,ratio) 
inv_sparse = scipy.sparse.linalg.inv(A) 

有沒有辦法生成非奇異稀疏矩陣?

我真正想要做的是與np.linalg.invscipy.sparse.linalg.inv比較性能(處理時間)。這就是爲什麼我需要生成不是奇異的隨機稀疏矩陣。

+1

評論可能會幫助http://math.stackexchange.com/questions/449396/getting-non-singular-invertible-matrix-from-a-singular-one你可能也只是檢查的決定,然後做反轉...或者生成它們並處理異常...可能事先生成已知爲非奇異的案例 – tenCupMaximum

+1

單數是因爲2行還是更多行都是零?如果密度足夠低,這是可能的。 – hpaulj

+2

嘗試添加'sparse.eye(A.shape [0])'到它。 – hpaulj

回答

2

你的矩陣的密度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。這個概率非常低。

由於矩陣可能包含一個空行,它通常是單數。

此外,由於浮點數的有限的精度,程序通常考慮不周conditionned矩陣作爲單數。事實上,在這種情況下,計算出來的倒數會非常不正常,毫無意義。

最後,比較反函數,它可能是更好地使用已知可逆矩陣......至少,你可以嘗試增加密度,使空行的概率變得非常低。這裏