2012-10-19 44 views
1

在一個scipy程序中,我創建了一個dia_matrix(稀疏矩陣類型)和5個對角線。中心對角線1個& -1對角線和4個& -4對角線(通常>> 4,但原理是相同的),即我有以下形式的典型PDE系統矩陣:Scipy sparse dia_matrix solver

[ a0 b0 0 0 0 d0 0 0 0 ... 0.0 ] 
[ c1 a1 b1 0 0 0 d1 0 0 ... 0.0 ] 
[ 0 c2 a2 b2 0 0 0 d2 0 ... 0.0 ] 
[ 0 0 c3 a3 b3 0 0 0 d3 ... 0.0 ] 
[ 0 0 0 c4 a4 b4 0 0 0 ... 0.0 ] 
[ e5 0 0 0 c5 a5 b5 0 0 ... 0.0 ] 
[ : : : : : : : : : : : ] 
[ 0 0 0 0 0 0 0 0 0 ... aN ] 

當我使用scipy.linalg.dsolve.spsolve()來解決矩陣方程它的工作原理,但我得到以下報告給我

>>> SparseEfficiencyWarning: spsolve requires CSC or CSR matrix format 
    warn('spsolve requires CSC or CSR matrix format', SparseEfficiencyWarning) 

如果SPSOLVE()不是有效的解決稀疏矩陣型dia_matrix的那麼我應該使用什麼?

回答

1

警告說這一切,我想。看起來它希望你使用csr_matrixcsc_matrix

我假設你正在用scipy.sparse.diags創建矩陣。構建矩陣時,應該只能使用format = 'csr'format = 'csc'

+0

對不起,自從我發佈此消息以來,我一直在參加會議。 – dmon

+1

感謝您的回答,我同意將其轉換爲csr/csc矩陣將刪除警告,但這不是我的問題。我創建了一個dia_matrix,因爲這是最能描述我的問題的矩陣。將其轉換爲更一般的稀疏矩陣並使用更一般的稀疏矩陣求解器似乎是浪費。由於dia_matrix是一個標準的scipy矩陣類型,我會假設有一個專門用於這種矩陣的線性求解器? – dmon

2

我這個答案有點晚了,但我希望你發現,添加:

from scipy.linalg import solve_banded 

允許您使用DIA矩陣,而不必訴諸CSR或CSC。

+0

我沒有找到這!!我只是強迫轉換到CSC。感謝您的遲到,更重要的是有幫助,回覆:) – dmon

+1

solve_banded和DIAgonal格式不同;請參閱https://github.com/scipy/scipy/issues/2285:「創建dia_matrix對象,然後手動解構它們以傳遞給resolve_banded是不直觀且容易出錯的。」 – denis