簡體   English   中英

為什么稀疏矩陣的“scipy.sparse.linalg.spilu”效率低於“scipy.linalg.lu”?

[英]Why is 'scipy.sparse.linalg.spilu' less efficient than 'scipy.linalg.lu' for sparse matrix?

我在https://scicomp.stackexchange.com上發布了這個問題,但沒有受到關注。 只要我在其中一個中得到答案,我就會在另一個中通知。


我有一個稀疏矩陣B並嘗試使用一個 function scipy.sparse.linalg.spilu專門用於稀疏矩陣來分解B 你能解釋一下為什么這個 function 比 function scipy.linalg.lu的效率明顯低嗎? 太感謝了!

import numpy as np
import scipy.linalg as la
import scipy.sparse.linalg as spla
import time
from scipy import sparse
from scipy.sparse import csc_matrix
A = np.random.randint(100, size=(10000, 10000))
B = np.triu(A, -100)

start = time.time()
(P, L, U) = la.lu(B)
end = time.time()
print('Time to decompose B with lu =', end - start)

start = time.time()
mtx = spla.spilu(csc_matrix(B))
end = time.time()
print('Time to decompose B with spilu =', end - start)

計算時間為

Time to decompose B with lu = 4.7765138149261475
Time to decompose B with spilu = 14.165712594985962
(B==0).sum()
Out[5]: 49510694

B.shape
Out[6]: (10000, 10000)

(B==0).sum()/100000000
Out[7]: 0.49510694

您的矩陣 B 一點也不稀疏。 B 中超過一半的元素是非零的。 當然 spilu 在處理如此密集的矩陣時效率會降低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM