Ho creato un piccolo codice che voglio utilizzare per risolvere problemi agli autovalori che coinvolgono matrici sparse di grandi dimensioni. Funziona bene, tutto quello che voglio fare ora è impostare alcuni elementi nella matrice sparsa a zero, cioè quelli nella riga più in alto (che corrisponde all'implementazione delle condizioni al contorno). Posso semplicemente regolare i vettori delle colonne (C0, C1 e C2) sotto per ottenere quello. Tuttavia, mi sono chiesto se c'è un modo più diretto. Evidentemente, l'indicizzazione NumPy non funziona con il pacchetto sparse di SciPy.Come modificare gli elementi nella matrice sparsa in Python's SciPy?
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()
Questa è una visualizzazione della matrice creata dal codice sopra. Voglio quindi impostare gli elementi nella prima riga zero.
Ho trovato un lavoro in giro. Il formato che sto usando (dia_matrix) non va bene per il desiderio che voglio raggiungere. Userò invece csr_matrix. Dovrei chiudere questo post, allora? – seb
è una domanda ben scritta e potrebbe essere utile ad altri in futuro. Che ne dici di pubblicare ciò che hai trovato come risposta? – YXD
ok, lo farò – seb