numpy를 이용한 행렬 연산

Yerin Kim·2023년 4월 24일
0

Python

목록 보기
1/2

NumPy란?
NumPy는 파이썬에서 과학 계산을 위한 가장 중요한 패키지 중 하나!
NumPy는 다차원 배열을 다루는데 필요한 다양한 기능을 제공하며, 선형대수, 푸리에 변환, 난수 발생기 등과 같은 과학 계산 기능을 제공한다.

NumPy는 파이썬의 기본 자료형과는 달리, C나 포트란과 같은 저수준 언어로 구현되어 있어 속도가 빠르며, 대용량 데이터 처리에 유용하다. 또한 NumPy 배열은 파이썬의 리스트와는 달리 같은 타입의 데이터만 저장할 수 있어 메모리 사용이 효율적이다.

NumPy를 사용하면 배열을 생성하고 다양한 수학 함수를 이용하여 연산을 수행할 수 있다.
또한 NumPy는 matplotlib과 같은 시각화 라이브러리와 함께 사용되어 데이터 분석과 시각화에 매우 유용하다.

#numpy를 이용한 행렬 연산

import numpy as np
a = np.array([[1, 2], [3, 4]])

print(a)

위 코드를 실행하면, 2x2 크기의 2차원 배열을 생성하고 출력한다.
np.array() 함수를 사용하여 배열을 생성하고, 배열의 요소는 대괄호 [ ] 안에 콤마로 구분하여 입력한다.
이 코드에서는 2차원 배열을 생성하였으며, 첫 번째 요소는 [1, 2], 두 번째 요소는 [3, 4]이다.
출력 결과로는 배열 전체가 출력된다.



numpy를 이용하여 2차원 배열을 만들고, 이를 전치하여 출력하는 코드

import numpy as np

a = np.array([[1,2,3], [4,5,6]])
print(a.T) #전치행렬

위 코드를 실행하면, 2x3 크기의 2차원 배열을 생성하고, 이를 전치하여 출력한다.
np.array() 함수를 사용하여 배열을 생성하고, 배열의 요소는 대괄호 [ ] 안에 콤마로 구분하여 입력한다.
이 코드에서는 2차원 배열을 생성하였으며, 첫 번째 요소는 [1, 2, 3], 두 번째 요소는 [4, 5, 6]입니다. a.T를 사용하여 배열의 전치행렬을 구하고, 출력한다.

참고) 전치행렬이란?
주어진 행렬의 행과 열을 바꾼 행렬을 말한다.
즉, 원래의 행렬에서 i번째 행과 j번째 열에 위치한 원소가 전치행렬에서는 j번째 행과 i번째 열에 위치한다!


#행렬 차원 확인
import numpy as np
a = np.array([[1,2,3], [4,5,6]])
print(a.shape) #2행 3열

위 코드를 실행하면, 2x3 크기의 2차원 배열을 생성하고, 이 배열의 차원을 출력한다.
np.array() 함수를 사용하여 배열을 생성하고, 배열의 요소는 대괄호 [ ] 안에 콤마로 구분하여 입력한다.
이 코드에서는 2차원 배열을 생성하였으며, 첫 번째 요소는 [1, 2, 3], 두 번째 요소는 [4, 5, 6]이다.
a.shape를 사용하여 배열의 차원을 출력한다.
출력 결과로는 (2, 3)이 출력되며, 이는 2행 3열임을 나타낸다.


#행렬 형태 변경
import numpy as np

a = np.array([[1,2,3],[4,5,6]])
b = np.reshape(a, (3,2))

print(b.shape)
print(b)

위 코드를 실행하면, 2x3 크기의 2차원 배열을 생성하고, 이 배열의 형태를 변경한다.
np.array() 함수를 사용하여 배열을 생성하고, 배열의 요소는 대괄호 [ ] 안에 콤마로 구분하여 입력한다.
이 코드에서는 2차원 배열을 생성하였으며, 첫 번째 요소는 [1, 2, 3], 두 번째 요소는 [4, 5, 6]입니다. np.reshape() 함수를 사용하여 배열의 형태를 (3,2)로 변경한다.
b.shape를 사용하여 변경된 배열의 차원을 출력하고, b를 출력하여 배열의 내용을 확인한다.
출력 결과로는 (3, 2)이 출력되며, 이는 3행 2열임을 나타낸다.
또한 b 배열의 내용은 원래 배열의 행과 열이 바뀌어서 출력된다.


#numpy를 이용한 행렬 연산

import numpy as np

#배열간 사칙연산
a = np.array([[1,2,3], [4,5,6]])
b = np.array([[2,3,4], [5,6,7]])
print(a+b)

print(a * 3)

print(a-b)

print(a - 2)

print(a*b)

print(a*2)

print(a/b)

print(a/2)


아래와 같이 행렬의 형태가 다른 경우에는 불가하다

a = np.array([[1,2,3], [4,5,6]])
b = np.array([[2,3], [5,6]])

a + b는 오류 발생

행렬의 곱셈
-> 행렬의 곱셈을 할 때는 앞의 행렬의 열 개수와 뒤의 행렬의 행 개수가 일치해야한다.

np.dot() 함수

np.dot(a, b)는 배열 a와 b의 점곱(dot product)을 반환한다.
이 함수는 a와 b가 모두 1차원 배열인 경우는 내적(inner product)을 계산하며, a와 b가 모두 2차원 배열인 경우는 행렬곱(matrix product)을 계산한다.

만약에 a가 2차원 배열이고, b가 1차원 배열인 경우에는 np.dot(a, b)는 b를 열 벡터(column vector)로 간주하고, a의 각 행(row)에 대해 내적을 계산하여 1차원 배열을 반환한다.

np.dot(a, b) 대신 a.dot(b)나 b.dot(a)와 같이 메서드 형태로도 사용할 수 있다.

import numpy as np

a = np.array([1, 2, 3])  # 1차원 배열
b = np.array([4, 5, 6])  # 1차원 배열

c = np.dot(a, b)
print(c)  # 출력: 32


a = np.array([[1, 2], [3, 4]])  # 2차원 배열
b = np.array([[5, 6], [7, 8]])  # 2차원 배열

c = np.dot(a, b)
print(c)  # 출력: [[19 22]
          #        [43 50]]

a = np.array([[1, 2], [3, 4]])  # 2차원 배열
b = np.array([5, 6])  # 1차원 배열

c = np.dot(a, b)
print(c)  # 출력: [17 39]

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[1, 2], [3, 4], [5, 6]])

print(np.dot(a, b))


profile
내일의 나는, 오늘의 도전으로 만들어진다!

0개의 댓글