Предположим, у меня есть (очень большая) разреженная матрица, являющаяся объектом 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)
Это делает то, что я хочу, но слишком медленно. Есть ли способ быстрее получить тот же результат (т. Е. Без явной установки всех записей в подматрице)?