2013-03-17 19 views
3

我想從scipy稀疏矩陣中提取特定的行和列 - 可能lil_matrix將是這裏的最佳選擇。在行和列中切片scipy.sparse.lil_matrix

它的工作原理在這裏罰款:

from scipy import sparse 
lilm=sparse.lil_matrix((10,10)) 
lilm[0:4,0:3] 

這會返回一個4×3稀疏矩陣。我不想從矩陣塊,而是單列和行。我期望這個工作:

lilm[[1,2,3],[4,5,6]] 

但它返回一個1x3稀疏矩陣。這也不適用於numpy數組,但您可以使用numpy.ix_,如Slicing of a NumPy 2d array, or how do I extract an mxm submatrix from an nxn array (n>m)?中所述。

如何用lil_matrix完成此行爲?

我的問題部分回答在slicing sparse (scipy) matrix,但我無法讓它工作於lil_matrix

回答

4

您需要先提取行,則列:

>>> a = np.arange(100).reshape(10, 10) 
>>> a 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], 
     [40, 41, 42, 43, 44, 45, 46, 47, 48, 49], 
     [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], 
     [60, 61, 62, 63, 64, 65, 66, 67, 68, 69], 
     [70, 71, 72, 73, 74, 75, 76, 77, 78, 79], 
     [80, 81, 82, 83, 84, 85, 86, 87, 88, 89], 
     [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]) 

>>> lilm = scipy.sparse.lil_matrix(a) 

>>> lilm[[1, 2, 3], :].toarray() # extract the rows first... 
array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]]) 

>>> lilm[[1, 2, 3], :][:, [4, 5, 6]].toarray() # ...then the columns 
array([[14, 15, 16], 
     [24, 25, 26], 
     [34, 35, 36]]) 

你當然會從這個最後的表達式中刪除.toarray()得到回報律稀疏矩陣。

+0

謝謝你的回答 - 再次:) – 2013-03-18 09:29:25