vec
是稀疏矩阵的一行。
vec = sparse.csc_matrix([[0,0,1,1,0,1,0,1]])
如何随机选择2个值为“ 1”的条目并将其值更改为8?
我尝试过
a,b,c = sparse.find(vec==1)
idx = numpy.random.choice(vec[a,b],2)
vec[idx] = 8
但是我遇到了尺寸错误,因为vec
是较大的稀疏矩阵的行之一,类似于嵌套数组。
答案 0 :(得分:0)
这会将您的稀疏行转换为布尔掩码,以进行操作。
ones = np.stack(np.where((vec==1).toarray())).T # [[i,j],[i,j]..]
chosen = np.random.choice(len(ones), 2) # [1,3]
for index in chosen:
vec[tuple(ones[index])] = 8
由于这是逐行的,我认为您不会遇到内存问题。