我在 python 中有一個塊對角稀疏矩陣,有數十萬到數百萬行,但在 1x1 和 6x6 之間有許多不同大小的塊;例如子矩陣上的 plt.spy() :
我需要這個矩陣的逆而不需要在 python 中回圈(太慢)。我應該能夠提取塊對角線以獲得二維陣列串列(實際上還沒有實作),但即使這樣我也無法弄清楚如何將 np.linalg.inv() 應用于一堆不同的尺寸矩陣。關于以稀疏矩陣形式或通過對角塊串列進行反轉的任何想法?
uj5u.com熱心網友回復:
AFAIK,沒有辦法使用 Numpy 有效地做到這一點。最好的解決方案是按大小對塊進行分組,以矢量化方式計算它們(大多數 Numpy 函式不能在不同大小的陣列上作業)。但是這個解決方案不是很好,因為 Numpy 不是為計算小陣列而設計的,對于這么小的塊來說開銷會很大。
一個解決方案是使用Numba來生成快速的本地代碼來有效地計算你的塊。Numba 支持型別化串列和np.linalg.inv. 如果您的輸入是稀疏矩陣,最好的解決方案是直接從中提取子塊。但是,Numba 還不支持 Scipy 的稀疏矩陣。話雖如此,您可以例如提取 CSR 矩陣的data和indices欄位(它們是 Numpy 陣列),以便使用 Numba 計算它們,盡管這樣做有點復雜。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430702.html
