我想在大稀疏矩阵(目前12000条12000)运营的最大值。 我想要做的就是它的块设置为零,但保持该块内的最大值。 我已经有密集矩阵正在运行的解决方案:SciPy的/ numpy的:只保留一个稀疏矩阵块
import numpy as np
from scipy.sparse import random
np.set_printoptions(precision=2)
#x = random(10,10,density=0.5)
x = np.random.random((10,10))
x = x.T * x
print(x)
def keep_only_max(a,b,c,d):
sub = x[a:b,c:d]
z = np.max(sub)
sub[sub < z] = 0
sizes = np.asarray([0,1,5,4])
sizes_sum = np.cumsum(sizes)
for i in range(1,len(sizes)):
current_i_min = sizes_sum[i-1]
current_i_max = sizes_sum[i]
for j in range(1,len(sizes)):
if i >= j:
continue
current_j_min = sizes_sum[j-1]
current_j_max = sizes_sum[j]
keep_only_max(current_i_min, current_i_max, current_j_min, current_j_max)
keep_only_max(current_j_min, current_j_max, current_i_min, current_i_max)
print(x)
然而,这不适用于稀疏矩阵(重试取消注释在上面的线)。 任何想法我怎么能有效地实现这一点没有调用todense()?
块确实是不重叠的,因为我或多或少产生棋盘图案,其中每个细胞只保留它的最大价值。 – Zahlii