簡體   English   中英

如何在稀疏 COO 矩陣中將特定行值相加以重塑矩陣

[英]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_colb_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM