티스토리 뷰
Project : Py_EX
Python file : EX03_arraycal.py
Module : Numpy (as np)
IDE : PyCharm [설치방법]
공학분야를 다루다 보면 행렬(matrix)연산은 기본적으로 많이 다루게 되는데, matlab에서는 이를 굉장히 간단하게 다룰 수 있도록 함수 및 인터페이스가 잘 되어있다. 파이썬도 비슷한 능력을 갖고 있을거라고 생각하고 한 번 시도해보자.
파이썬에는 NumPy라는 패키지가 있다. 이놈을 설치하고 시작하자. 설치 방법은 전에 한번 설명한 바가 있으니 참고하자. [바로가기] NumPy가 무엇인지 궁금하다면 홈페이지를 한번 방문해서 둘러보는것을 추천한다.
무려 올해 6월에 로고가 새로 제작되었다고 하니 한번 보고 넘어가자. 따끈따끈하다.
여기에서 내가 해보고 싶은 것은 행렬을 만들고 연산을 해보는 것이다. 예를들면
우리는 이런 연산을 눈만 꿈벅거려도 금방 풀 수 있다. 한번 해보자.
눈으로 풀었지만 이정도는 틀리기도 어렵다. 하지만 행렬수가 늘어나고 수가 복잡해지면 계산기를 쓰지 않을 수 없다. 우리의 고성능 계산기 파이썬으로 이 문제를 풀어보자.
## 행렬 생성
# matrix, array
NumPy에서 행렬을 만드는 방법은 두 가지가 있다.
- matrix로 행렬을 생성 (like matlab)
- array로 배열을 생성
이중 뭘 써야할까? 어떤 차이가 있는지 일단 한 번 만들어보자.
import numpy as np
a_matrix = np.matrix([[2, 5], [1, 3], [6, 1]])
print(a_matrix)
a_array = np.array([[2, 5], [1, 3], [6, 1]])
print(a_array)
결과는
[[2 5] [1 3] [6 1]] [[2 5] [1 3] [6 1]] |
로 완벽하게 같은 결과가 출력된다. 그런데 파이참에서 코드를 자세히 보면 뭔가 이상하다.
np.matrix 에 취소선이 그어져있고, 그 곳을 클릭하면 다음과 같은 설명을 확인할 수 있다.
the matrix subclass is not the recommended way to represent matrices or deal with linear algebra (see https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html). Please adjust your code to use regular ndarray. |
즉, matrix의 하위 클래스는 행렬을 나타내거나 선형대수를 다루는데에 권장되는 방법이 아니라는 이야기 이고, URL을 따라가면 뜻밖의 좋은 페이지를 만날 수 있다. 특히 matlab 유저였던 파이썬 초보 사용자들에게는 무척이나 유익한 내용이니 시간을 내어서 한번 봐두면 좋겠다. matlab과 numpy의 함수들의 비교표가 아주 잘 정리되어 있고, matrix와 array의 장/단점도 잘 정리가 되어있다. 아예 프린트를 해서 책상에다 붙여두자.
본론으로 돌아와서 결론적으로 numpy.matrix 는 더이상 권장되지 않으며 대신에 numpy.array 를 사용하라는 것이 NumPy의 권장사항이며 심지어 numpy.matrix 는 미래에는 아예 사라질지도 모른다고 한다. 그래도 아직 작동은 되는 것 같으니 없어지기 전에 한번 사용이나 해보자. numpy.matrix 의 사용은 matlab과 굉장히 유사하다. [numpy.matrix 매뉴얼] 하지만 오해는 말자, 없어질 녀석이니 마지막으로 써보는 것이고 matlab에서 파이썬으로 넘어왔으니 앞으로 행렬 연산은 모두 numpy.array 를 사용해야겠다.
## 행렬 연산
# dot(), @
numpy.matrix 를 사용한 행렬의 곱 연산 결과 위에서 눈대중으로 계산했던 결과가 그대로 출력된다. 데이터타입은 누군가가 궁금해 할 수 있을까봐 출력해 보았다. type() 내장함수를 사용하고, 결과는 당연히 numpy.matrix 이다.
import numpy as np
a_matrix = np.matrix([[2, 5], [1, 3], [6, 1]]) # numpy.matrix를 사용하여 a행렬 생성
b_matrix = np.matrix([[3], [2]]) # numpy.matrix를 사용하여 b행렬 생성
c_matrix = a_matrix*b_matrix # numpy.matrix의 행렬의 곱 연산
print(c_matrix) # 행렬의 곱 연산 결과 출력
print(type(c_matrix)) # matrix의 type 출력
[[16] [ 9] [20]] <class 'numpy.matrix'> |
numpy.array를 사용한 행렬의 곱 연산도 마찬가지의 결과를 얻을 수 있다. 해보자.
import numpy as np
a_array = np.array([[2, 5], [1, 3], [6, 1]]) # numpy.array를 사용하여 a행렬 생성
b_array = np.array([[3], [2]]) # numpy.array를 사용하여 b행렬 생성
c_array = a_array @ b_array # numpy.array의 행렬의 곱 연산
print(c_array) # 행렬의 곱 연산 결과 출력
print(type(b_array)) # array의 type 출력
[[16] [ 9] [20]] <class 'numpy.ndarray'> |
같은 결과가 출력되며, array의 데이터 타입은 numpy.ndarray 이다. n-dimension array 라는 것이겠지. 여기에서 주목할 것은 행렬의 곱 연산 방법인데, numpy.matrix 는 * 연산자가 행렬의 곱을 이야기 하지만 numpy.array 에서 * 연산자는 원소간의 곱, 즉 matlab에서 .* 연산자에 해당한다. numpy.array 에서 행렬의 곱을 하기 위해서는 dot() 함수나 @ 연산자(python 3.5이상)을 사용한다. 이 내용은 위에서 언급한 링크(NumPy for Matlab Users)에 아주 자세히 설명되어 있다.
# 전체 코드
# 행렬 만들고 계산까지 해보기 20.09.14
import numpy as np
a_matrix = np.matrix([[2, 5], [1, 3], [6, 1]]) # numpy.matrix를 사용하여 a행렬 생성
b_matrix = np.matrix([[3], [2]]) # numpy.matrix를 사용하여 b행렬 생성
c_matrix = a_matrix*b_matrix # numpy.matrix의 행렬의 곱 연산
print(c_matrix) # 행렬의 곱 연산 결과 출력
print(type(c_matrix)) # matrix의 type 출력
a_array = np.array([[2, 5], [1, 3], [6, 1]]) # numpy.array를 사용하여 a행렬 생성
b_array = np.array([[3], [2]]) # numpy.array를 사용하여 b행렬 생성
c_array = a_array @ b_array # numpy.array의 행렬의 곱 연산
print(c_array) # 행렬의 곱 연산 결과 출력
print(type(b_array)) # array의 type 출력
numpy의 matrix, array를 이용하여 행렬을 생성하고 행렬의 곱 연산을 해보았다. 나중에 써먹기에 아직은 조금 부족한 느낌이 든다. numpy.array 에 대해 조금 더 알아보자.
'Engineering > Python' 카테고리의 다른 글
[Python] 파이참(PyCharm)에서 PyQt5 설치하고 Qt Designer 실행해보기 (0) | 2020.10.09 |
---|---|
[Python] 행렬 만들고 연산까지 해보기2 (1) | 2020.09.15 |
[Python] pyplot 그래프 편집하기 (0) | 2020.09.06 |
[Python] 사인함수 그래프 그려보기 (0) | 2020.09.05 |
[Python] 사인함수(삼각함수) 사용해보기 (0) | 2020.09.05 |
- Total
- Today
- Yesterday
- pyplot
- Sine
- 한글
- linalg
- 터미널 실행
- 파이참
- Python
- 행렬
- 단위행렬
- pyQT5
- 모듈
- PI
- 콘솔창 삭제
- PyCharm
- 행렬의 곱
- 맛집
- sin
- numpy
- 갤럭시 워치 액티브2
- Console 삭제
- 기존 콘솔
- 파이썬
- 갤럭시 워치
- qt designer
- 배곧
- 액티브2
- 콘솔
- 그래프
- Python 콘솔에서 실행
- 언어팩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |