更改稀疏矩阵行的随机选择条目的值

时间:2018-10-24 22:34:47

标签: python numpy

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是较大的稀疏矩阵的行之一,类似于嵌套数组。

1 个答案:

答案 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

由于这是逐行的,我认为您不会遇到内存问题。