큰 스파 스 행렬이 포함 된 고유 값 문제를 해결하기 위해 사용하려는 작은 코드를 만들었습니다. 괜찮 으면 좋겠어. 지금하고 싶은 것은 스파 스 행렬의 일부 요소를 0으로 설정하는 것입니다. 즉 맨 위에있는 행 (경계 조건 구현에 해당)에있는 요소를 설정하는 것입니다. 이를 달성하기 위해 열 벡터 (C0, C1 및 C2)를 조정할 수 있습니다. 그러나 나는 더 직접적인 방법이 있는지 궁금해했다. 분명히 NumPy 인덱싱은 SciPy의 희소 패키지에서 작동하지 않습니다.파이썬의 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()
위의 코드로 빌드 한 행렬을 시각화 한 것입니다. 첫 번째 행의 요소를 0으로 설정하고 싶습니다.
해결 방법이 있습니다. 내가 사용하고자하는 형식 (dia_matrix)은 내가 원하는 것을 얻기에 좋지 않습니다. 나는 대신 csr_matrix를 사용할 것이다. 이 게시물을 닫아야합니까? – seb
잘 쓰여진 질문이며 앞으로 다른 사람들에게 유용 할 수 있습니다. 당신이 답으로 찾은 것을 게시하는 것은 어떻습니까? – YXD
좋아, 할게 – seb