How to create a diagonal sparse matrix in SciPy
diagonal, numpy, python, scipy, sparse-matrix
Solution
N = 10
diag = np.zeros(N) + 2
udiag = np.zeros(N) + 1
ldiag = np.zeros(N) + 1
mat = scipy.sparse.dia_matrix(([diag, udiag, ldiag], [0, 2, -2]), shape=(N, N))
print mat.todense()
[[ 2. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 2. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 1. 0. 2. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 2. 0. 1. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 2. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 2. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 1. 0. 2. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 1. 0. 2. 0. 1.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 2. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 2.]]
Problem
I am trying to create a sparse matrix which has a 2D pattern run down the diagonal. This is probably easiest to explain with a quick example. Say my pattern is: [1,0,2,0,1]... I want to create a sparse matrix: ``` [[2,0,1,0,0,0,0...0], [0,2,0,1,0,0,0...0], [1,0,2,0,1,0,0...0], [0,1,0,2,0,1,0...0], [0,0,1,0,2,0,1...0], [...]] ``` The scipy.sparse.dia_matrix seems like a good candidate, however, I simply cannot figure out how to accomplish what I want from the documentation available. Thank you in advance