티스토리 뷰
Project : Py_EX
Python file : EX03_arraycal.py
Module : Numpy (as np)
IDE : PyCharm [설치방법]
공학분야를 다루다 보면 행렬(matrix)연산은 기본적으로 많이 다루게 되는데, matlab에서는 이를 굉장히 간단하게 다룰 수 있도록 함수 및 인터페이스가 잘 되어있다. 파이썬도 비슷한 능력을 갖고 있을거라고 생각하고 한 번 시도해보자.
파이썬에는 NumPy라는 패키지가 있다. 이놈을 설치하고 시작하자. 설치 방법은 전에 한번 설명한 바가 있으니 참고하자. [바로가기] NumPy가 무엇인지 궁금하다면 홈페이지를 한번 방문해서 둘러보는것을 추천한다.
NumPy
Powerful N-dimensional arrays Fast and versatile, the NumPy vectorization, indexing, and broadcasting concepts are the de-facto standards of array computing today. Numerical computing tools NumPy offers comprehensive mathematical functions, random number g
numpy.org
무려 올해 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 for Matlab users — NumPy v1.19 Manual
Introduction MATLAB® and NumPy/SciPy have a lot in common. But there are many differences. NumPy and SciPy were created to do numerical and scientific computing in the most natural way with Python, not to be MATLAB® clones. This page is intended to be a
numpy.org
본론으로 돌아와서 결론적으로 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 에 대해 조금 더 알아보자.
[Python] 행렬 만들고 연산까지 해보기2
Project : Py_EX Python file : EX03_arraycal.py (이어서) Module : Numpy (as np) IDE : PyCharm 이전 글 참조 [Python] 행렬 만들고 연산까지 해보기 Project : Py_EX Python file : EX03_arraycal.py Module..
generalbulldog.tistory.com
'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
- 그래프
- numpy
- 맛집
- 배곧
- 갤럭시 워치 액티브2
- PyCharm
- Python 콘솔에서 실행
- 언어팩
- pyplot
- qt designer
- 단위행렬
- 갤럭시 워치
- PI
- Python
- 터미널 실행
- 액티브2
- linalg
- 행렬
- sin
- 콘솔
- 한글
- 파이참
- 행렬의 곱
- 파이썬
- Console 삭제
- Sine
- 모듈
- pyQT5
- 콘솔창 삭제
- 기존 콘솔
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |