2013-11-28 37 views
0

假設我有列表,其中每個子列表中包含連續的行的列索引的列表,以被設置成1。如何在給定行和列索引的情況下設置稀疏矩陣的項目?

indices = [[1,43,243],[2,34,276],...] 

我的目的是設置符合給定指數的SciPy的稀疏矩陣的值。

例如:

用於第一行1,43,243的列需要用於第二行2,34,276的列需要被設置成1

被設置成1 如果它是一個愚蠢的問題對此感到抱歉。我只是一個從Matlab轉換到scipy的初學者。

回答

0

幾個sparse矩陣類型將工作。從sparse.csr_matrix文檔:http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html

>>> row = array([0,0,1,2,2,2]) 
>>> col = array([0,2,2,0,1,2]) 
>>> data = array([1,2,3,4,5,6]) 
>>> csr_matrix((data,(row,col)), shape=(3,3)).todense() 
matrix([[1, 0, 2], 
     [0, 0, 3], 
     [4, 5, 6]]) 

coo_matrix還藉此(data,(row,col))輸入

MATLAB提供有關添加重複條目創建一個稀疏矩陣,完成業務的一個類似的手段(見注在coo_matrix基地文檔)。

我想你想構建

row = array([0,0,0, 1,1,1,2,2,2,....]) 
col = array([1,43,243, 2,34,276,,...]) 
# col = col-1 # to change to 0 based indexing? 
data = array([1,1,1,...]) 

例如:

np.array(indices).ravel() 
# array([ 1, 43, 243, 2, 34, 276]) 
np.arange(2).repeat(3) 
# array([0, 0, 0, 1, 1, 1]) 
np.ones(6) 
# array([ 1., 1., 1., 1., 1., 1.])