2015-02-05 189 views
0

我有一個numpy數組列表。每個數組都擁有我需要的列的值,在稀疏二進制矩陣中有1。 numpy數組出現在列表中的順序是該numpy數組中所有值的行的值。我正在嘗試使用scipy.sparse.csr_matrix來做到這一點。所以我需要兩個numpy數組,一個用於列索引,另一個用於行索引。這裏是什麼,我需要一個例子:Numpy:爲稀疏矩陣創建索引

a = np.array([1, 2, 3, 4, 5, 6]) 
b = np.array([10, 11, 12]) 
c = np.array([60, 100]) 
d = [a, b, c] 

column = np.array([1, 2, 3, 4, 5, 6, 10, 11, 12, 60, 100]) 
row = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2]) 

回答

3

column爲d的只是一個扁平矢量,所以嘗試:

column = np.hstack(d)

對於row,這應該工作:

row = np.hstack([np.ones(len(arr))*i for i, arr in enumerate(d)])

基本上:通過d,在d中每個項目的長度做一個數列,乘以它s指數,然後將所有這些變成一個向量。

+0

'np.concatenate'對這些1d陣列也是一樣的。 – hpaulj 2015-02-05 20:45:08

0

兩三產生row陣列的其它方法:

row = np.concatenate([np.ones_like(x)*i for i,x in enumerate(d)]) 

row = np.concatenate([[i]*len(x) for i,x in enumerate(d)]) 

該小例子後者,用列表複製,是一個相當快一點。但是對於大型數組,時間可能會以另一種方式進行。

對於像這樣的1d陣列,hstack與默認的concatenate相同。

col = np.concatenate(d) 

sparse呼叫隨後(形狀(N,M)

sparse.csr_matrix((np.ones_like(col),(row, col)),shape=(N,M)) 

coocsrcsc所有接受輸入的這種風格。 coo不同之處在於它完全按照給定的屬性來分配屬性(所以速度很快)。其他人做一些排序和總結(允許重複行,col對)和清潔。