Используйте scipy.sparse.dok_matrix.setdiag только для части объекта dok_matrix - PullRequest
0 голосов
/ 17 ноября 2018

Предположим, у меня есть (очень большая) разреженная матрица, являющаяся объектом scipy.sparse.dok_matrix. Я хочу установить диагональ только подматрицы к определенному значению. Я сначала подумал, что-то вроде этого будет работать:

import scipy.sparse as sp

dim = 20 # dim can go up to large numbers
A = sp.dok_matrix((num, num))
A[num//2:-1,num//2:-1].setdiag(2)

, но это приводит только к пустой матрице (я полагаю, из-за того, как матрица хранится внутри с использованием массивов). Я знаю, что для этого небольшого примера я мог бы использовать setdiag для всей матрицы и подключить массив с нулями в начале, но этого не будет достаточно для больших размеров матрицы, так как массив станет слишком большим. Я также попробовал:

A[num//2:-1,num//2:-1] = 2*sp.eye((num-1)//2)

Это делает то, что я хочу, но слишком медленно. Есть ли способ быстрее получить тот же результат (т. Е. Без явной установки всех записей в подматрице)?

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