這是你想要的矩陣嗎?
In [200]: sparse.dia_matrix(([[0,0,1,0,0,0],[0,0,0,0,1,2]],[2,3]),(6,6)).A
Out[200]:
array([[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 2],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])
是的,規範包括零,這可能會在較大的情況下令人討厭。
spdiags
只包裝dia_matrix
,可以選擇將結果轉換爲另一種格式。在你的例子中,一個7元素稀疏轉換爲3.
sparse.diags
接受一個粗糙的值列表,但它們仍然需要匹配對角線的長度。並在內部將它們轉換爲dia_matrix
所需的矩形陣列。
S3=sparse.diags([[1,0,0,0],[0,1,2]],[2,3],(6,6))
所以,如果你真的需要吝嗇約零點你需要去coo
路線。
例如:
In [363]: starts = [[0,2],[1,4]]
In [364]: data = np.concatenate(vec)
In [365]: rows=np.concatenate([range(s[0],s[0]+len(v)) for s,v in zip(starts, vec)])
In [366]: cols=np.concatenate([range(s[1],s[1]+len(v)) for s,v in zip(starts, vec)])
In [367]: sparse.coo_matrix((data,(rows,cols)),(6,6)).A
Out[367]:
array([[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 2],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])