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
복사