[英]Scipy Sparse: Singular Matrix Warning after SciPy/NumPy Update
我的問題來自對大型電阻器系統的節點分析。 我基本上是在建立一個大的稀疏矩陣A ,即我的解向量b ,並且試圖解決線性方程A * x = b 。 為此,我使用了scipy.sparse.linalg.spsolve方法。
直到最近,一切都運轉良好,直到我將SciPy從v0.13.3升級到v0.19.1(其中還包括將NumPy升級到v1.13.1)。 我正在運行Python 2.7.6。 當使用與更新前相同的代碼時,會出現錯誤,尤其是對於產生matrices > 10000 x 10000
。 警告是:
SparseEfficiencyWarning: splu requires CSC matrix format
warn('splu requires CSC matrix format', SparseEfficiencyWarning)
MatrixRankWarning: Matrix is exactly singular
warn("Matrix is exactly singular", MatrixRankWarning)
有時, spsolve無法找到解決方案。
在進行節點分析時,由於接地電位的位置通常不確定,因此期望使用奇異矩陣。 但是,在更新之前,有99%的案例找到了解決方案,甚至可能更多。 現在,我最多只能使用10%的大型系統。 我沒有更改算法,在一些測試中,我使用了與以前相同的代碼。 這是我設置計算的方式:
可能是方法改變了嗎?
溶解甚至不合適嗎? 我創建的矩陣通常是對稱的,並呈塊對角線形式。 有沒有解決比SPSOLVE線性方程更有效的方法?
各種幫助將不勝感激! 謝謝閱讀。
您以前的scipy-version很老,它使用umfpack來完成此任務。
由於許可問題 (GPL與scipy不兼容,我認為umfpack在某個時候切換了許可), 因此刪除了該庫 ,現在使用了superlu 。 許多人觀察到速度變慢(以及健壯性問題),但是評估性能可能並不那么容易(superlu也可以既快速又健壯)。
也請閱讀此內容 。
您可能有兩種選擇:
如果您的矩陣是PSD, 則 scikit-sparse中可用的cholmod (當前未維護!)可能是要使用的庫(再次:許可證)!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.