我想在大稀疏矩陣(目前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