Изменить значение случайно выбранной записи строки разреженной матрицы - PullRequest
0 голосов
/ 25 октября 2018

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 голосов
/ 25 октября 2018

Это преобразует вашу разреженную строку в логическую маску для ваших операций.

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

Поскольку это построчно, я думаю, что у вас не будет проблем с памятью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...