问题描述
我正在处理大小为sparse.csr.csr_matrix(类型为'的稀疏矩阵,具有存储的9111761元素),并使用jupyter笔记本3.7.4
我的要求是根据稀疏矩阵中元素的值提取前2个结果。
当前稀疏矩阵
(1,1) 0.5
(1,5) 0.66
(1,6) 1.0
(2,2) 1.0
(2,3) 0.5
(2,7) 0.33
所需的稀疏矩阵
(1,6) 1.0
(1,5) 0.66
(2,3) 0.5
我正在寻找可以在大型矩阵上工作而又不花费很多时间的解决方案。
谢谢。
解决方法
top_n = 2
out = []
for r in arr:
if r.data.size <= top_n:
out.append(r)
else:
top_hits = np.argsort(r.data)[-1 * top_n:]
out.append(sparse.csr_matrix((r.data[top_hits],r.indices[top_hits],np.array([0,len(top_hits)])),shape=(1,arr.shape[1])))
out = sparse.vstack(out)
这不会很快。我不知道有什么更好的方法。