Comment changer des éléments dans une matrice éparse dans SciPy de Python?

J'ai construit un petit code que je veux utiliser pour la résolution de problèmes aux valeurs propres problèmes impliquant de grandes matrices creuses. Ça fonctionne, tout ce que je veux faire maintenant est de définir certains éléments dans la matrice creuse à zéro, c'est à dire ceux dans le très haut de la ligne (qui correspond à la mise en œuvre de conditions aux limites). Je peux juste régler les vecteurs colonnes (C0, C1, C2) ci-dessous pour y parvenir. Cependant, je me demandais si il y a une façon plus directe. De toute évidence, NumPy l'indexation ne fonctionne pas avec SciPy éparses paquet.

import scipy.sparse as sp
import scipy.sparse.linalg  as la
import numpy as np
import matplotlib.pyplot as plt

#discretize x-axis
N = 11
x = np.linspace(-5,5,N)
print(x)
V = x * x / 2
h = len(x)/(N)
hi2 = 1./(h**2)
#discretize Schroedinger Equation, i.e. build 
#banded matrix from difference equation
C0 = np.ones(N)*30. + V
C1 = np.ones(N) * -16.
C2 = np.ones(N) * 1.
diagonals = np.array([-2,-1,0,1,2])
H = sp.spdiags([C2, C1, C0,C1,C2],[-2,-1,0,1,2], N, N)
H *= hi2 * (- 1./12.) * (- 1. / 2.)
#solve for eigenvalues
EV = la.eigsh(H,return_eigenvectors = False)

#check structure of H
plt.figure()
plt.spy(H)
plt.show()

C'est une visualisation de la matrice qui est à construire par le code ci-dessus. Je veux donc définir les éléments de la première ligne de zéro.Comment changer des éléments dans une matrice éparse dans SciPy de Python?

source d'informationauteur seb | 2013-04-09