[英]How to sum specific row values together in Sparse COO matrix to reshape matrix
我有一個使用 scipy 庫在 python 中構建的稀疏 coo 矩陣。 示例數據集如下所示:
>>> v.toarray()
array([[1, 0, 2, 4],
[0, 0, 3, 1],
[4, 5, 6, 9]])
我想將第 0 個索引和第 2 個索引加在一起,將第 1 個索引和第 3 個索引加在一起,這樣形狀將從 3、4 變為 3、2。
但是查看文檔,他們的sum 函數不支持某種切片。 因此,我想到的唯一方法是將矩陣作為數組循環,然后使用 numpy 獲取求和值,如下所示:
a_col = []
b_col = []
for x in range(len(v.toarray()):
a_col.append(np.sum(v.toarray()[x, [0, 2]], axis=0))
b_col.append(np.sum(v.toarray()[x, [1, 3]], axis=0))
然后使用a_col
和b_col
的這些值再次創建矩陣。
但是肯定應該有一種方法可以用sum
方法來處理它嗎?
您可以使用簡單的循環和 2d 切片添加值,而不是獲取您想要的列
v = np.array([[1, 0, 2, 4],
[0, 0, 3, 1],
[4, 5, 6, 9]])
for i in range(2):
v[:, i] = v[:, i] + v[:, i+2]
print(v[:, :2])
輸出
[[ 3 4]
[ 3 1]
[10 14]]
您可以使用帶有特殊矩陣的csr_matrix.dot
來實現相同的目的,
csr = csr_matrix(csr.dot(np.array([[1,0,1,0],[0,1,0,1]]).T))
#csr.data
#[ 3, 4, 3, 1, 10, 14]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.