Search

대각 행렬 관련 함수

np.eye(N, M=None, k=0, dtype=<class ‘float’>, order=’C’)

N X M 크기의 2차원 행렬을 만들어주는 함수. k에 따라 시작위치가 달라진다
N : 행 수(필수)
M : 열 수(따로 지정하지 않으면 N X N 의 정사각행렬이 만들어진다)
k : 대각행렬이 값을 가지기 시작하는 위치
# 2 X 2 행렬. 시작위치 0 np.eye(N=2) # array([[1., 0.], # [0., 1.]]) # 2 X 3 행렬. 시작위치 0 np.eye(N=2, M=3) # array([[1., 0., 0.], # [0., 1., 0.]]) # 7 X 7 행렬. 시작위치 2 np.eye(N=7,k=2) #array([[0., 0., 1., 0., 0., 0., 0.], # [0., 0., 0., 1., 0., 0., 0.], # [0., 0., 0., 0., 1., 0., 0.], # [0., 0., 0., 0., 0., 1., 0.], # [0., 0., 0., 0., 0., 0., 1.], # [0., 0., 0., 0., 0., 0., 0.], # [0., 0., 0., 0., 0., 0., 0.]]) # 7 X 7 행렬. 시작위치 -2 np.eye(N=7,k=-2) #array([[0., 0., 0., 0., 0., 0., 0.], # [0., 0., 0., 0., 0., 0., 0.], # [1., 0., 0., 0., 0., 0., 0.], # [0., 1., 0., 0., 0., 0., 0.], # [0., 0., 1., 0., 0., 0., 0.], # [0., 0., 0., 1., 0., 0., 0.], # [0., 0., 0., 0., 1., 0., 0.]])
Python
복사

np.identity(n, dtype = None)

항상 정사각행렬의 단위행렬을 만들어준다.
np.identity(7) array([[1., 0., 0., 0., 0., 0., 0.], [0., 1., 0., 0., 0., 0., 0.], [0., 0., 1., 0., 0., 0., 0.], [0., 0., 0., 1., 0., 0., 0.], [0., 0., 0., 0., 1., 0., 0.], [0., 0., 0., 0., 0., 1., 0.], [0., 0., 0., 0., 0., 0., 1.]])
Python
복사

np.diag(v, k=0)

대각행렬 생성 기능 : v가 1차원 배열일 때, v를 대각행렬로 하는 2차원 배열을 만들어준다.
대각요소 추출 기능 : v가 2차원 배열일 때, v의 대각원소들을 1차원으로 뽑아준다.
마찬가지로 k를 이용해서 원하는 위치에 생성 또는 추출할 수 있다.
x = np.arange(4) # 1차원 배열 생성 np.diag(x) #array([[0, 0, 0, 0], # [0, 1, 0, 0], # [0, 0, 2, 0], # [0, 0, 0, 3]]) np.diag(x, k=1) #array([[0, 0, 0, 0, 0], # [0, 0, 1, 0, 0], # [0, 0, 0, 2, 0], # [0, 0, 0, 0, 3], # [0, 0, 0, 0, 0]]) # 대각행렬원소 추출 x = np.arange(9).reshape((3,3)) x #array([[0, 1, 2], # [3, 4, 5], # [6, 7, 8]]) np.diag(x) #array([0, 4, 8]) np.diag(x,k=1) #array([1, 5]) np.diag(x,k=-1) #array([3, 7]) ### np.diag 응용 ### # 대각행렬의 원소만 남겨서 대각행렬 만들기 np.diag(np.diag(x)) #array([[0, 0, 0], # [0, 4, 0], # [0, 0, 8]])
Python
복사