본문 바로가기
Python/python 응용: 수학 및 과학

Python NumPy 행렬의 원소 접근하여 작업하기: trace

by 철이88 2022. 12. 6.
반응형

이번에는 python에서 행렬의 원소에 접근하여 연산을 하는 방법을 알아보겠습니다. Python에서 행렬을 생성하기 위해 NumPy 배열을 이용할 것인데요, python에서 인덱스를 써서 리스트의 원소에 접근하는 방법과 유사하게 행렬의 원소에 접근할 수 있습니다.

1. 행렬의 원소 인덱싱(색인)


Python에서는 기본적으로 리스트형 데이터를 만들 수 있는데, 이는 배열과 같이 여러 원소로 이루어진 형태입니다. 
리스트에서는 각 원소를 순서대로 0, 1, 2, … 와 같은 인덱스를 부여하여 각 원소에 접근할 수 있습니다.
0부터 시작하는 것을 주의하세요.
예를 들면 아래 코드는 리스트 list_a의 첫 번째 원소를 출력합니다.

list_a = [1, 2, 3, 4, 5]
print(list_a[0])

사용법은 리스트 이름 뒤에 대괄호 [] 내에 인덱스 번호를 쓰는 것입니다.
리스트의 인덱스에 대해서는 아래 링크를 참조하세요.

Python 기초: 리스트 데이터


행렬의 원소도 이와 유사한 방법으로 접근할 수 있습니다.
다음 예를 보시기 바랍니다.

import numpy as np
matrix_A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix_A[0])
print(matrix_A[1][2])

이 예는 먼저 행렬의 첫 번째 행을 출력합니다.
그다음은 행렬의 2번째 행 3번째 열의 원소를 출력합니다.
즉, 첫 번째 인덱스는 행, 두 번째 인덱스는 열을 나타냅니다.
(인덱스 0이 1번 행, 1번 열을 나타냄을 주의)

2. 행렬의 trace를 구하는 코드 만들어 보기


사실 NumPy는 행렬의 trace(대각합)을 구하는 메소드 trace()가 있습니다.
이를 이용하면 trace를 아주 쉽게 구할 수 있지만, 위에서 배운 내용을 활용해서 직접 코드를 만들어 보겠습니다.

다음은 3 by 3 행렬의 trace를 구하는 코드 예입니다.

import numpy as np
matrix_A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

i = 0; trace = 0
while i < 3:
    trace += matrix_A[i][i]
    i += 1
print(trace)
print(np.trace(matrix_A))

이 예는 while 반복문을 써서 행렬의 대각 성분(i행 i열)들을 더해 줍니다.

이렇게 구해진 값은 첫 번째 출력문에서 출력합니다.
그리고 다음 출력문에서 NumPy의 trace() 메소드를 써서 구한 값을 출력하여 비교하겠습니다.


실행을 하면 두 출력 값 모두 15로 trace가 잘 계산된 것을 확인할 수 있습니다.

반응형

댓글