hamlet-story
NUMPY - [실습] 배열 구조 표현 본문
기존에 배웠던 차원 배열 개념을 이용해서 어떻게 하면 좀더 이해하기 쉬울까 생각을 하였습니다.
그래서 이번에는 Python 의 numpy 을 할용하여 배열 (array) 을 다루는 방법에 대해서 서술 해 볼려고 합니다.
설명은 아래와 같이 이루어 집니다.
1. numpy
2. numpy 배열 생성하기 - array()
3. numpy 배열 생성하기 - arange()
4. numpy 배열 생성하기 - zeros()
5. numpy 배열 생성하기 - ones()
6. numpy 배열 생성하기 - full()
7. numpy 배열 생성하기 - eye()
8. numpy 배열 변경하기 - reshape()
numpy
numpy 에 대해서 간단하게 설명드리면 과학 계산을 위한 파이썬 라이브러리로 배열 (array) 을 처리하는데 도움을 줍니다.
numpy 에 대한 설명은 공식문서 에 자세히 기제 되어있기 때문에 궁금하시다면 확인해주세요.
numpy 는 배열을 나타낼 때는 ndarray 라는 동일한 배열타입을 지니고, 나타냅니다.
numpy 배열 생성하기 - array()
기본적으로 numpy 에서 배열을 생성할 때는 array() 라는 함수를 사용합니다.
그리고 array() 라는 함수 안에 array (list) 을 넣어서 사용할 수 있습니다.
예시는 아래와 같습니다.
import numpy as np
list_a = [1,2,3,4,5,6]
list_np = np.array(list_a) # array([ list ])
print(list_np)
print(np.shape(list_np))
# 출력
# > [1 2 3 4 5 6]
# > (6,)
위의 내용에서 np.shape 라는 내용이 있는데 shape() 라는 함수는 배열의 크기를 반환 해주는 함수라고 생각해 주시면 됩니다.
numpy 배열 생성하기 - arange()
arange() 함수는 기본 python 의 range() 기능과 동일하게 연속된 숫자들을 만듭니다.
하지만 numpy 의 arange() 는 python 의 range() 와는 다르게 ndarray 타입을 가지고 있습니다.
예시는 아래와 같습니다.
import numpy as np
arr = np.arange(20)
print(arr)
# 출력
# > array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
위의 내용으로 arange() 함수는 array 형태로 요소 값들을 연속된 숫자로 표현하는 것을 알 수 있습니다.
numpy 배열 생성하기 - zeros()
zeros() 함수는 배열(array) 에 모두 0을 집어 넣습니다.
예시는 아래와 같습니다.
import numpy as np
list_np_zeros = np.zeros((2,3)) # 2차원에서는 (행, 열)로 표현한다.
print(list_np_zeros)
# 출력
# > [[0. 0. 0.]
# [0. 0. 0.]]
zeros() 함수의 장점은 다양한 차원 배열을 바로 만들어 낼 수 있다는 장점이 있습니다.
numpy 배열 생성하기 - ones()
ones() 함수는 배열 (array) 에 모두 1을 집어 넣습니다.
이 함수 또한 zeros() 함수와 마찬가지로 다양한 차원 배열을 바로 만들어 낼 수 있습니다.
예시는 아래와 같습니다.
import numpy as np
list_np_ones = np.ones((2,3))
print(list_np_ones)
# 출력
# > [[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]]
numpy 배열 생성하기 - full()
full() 함수는 배열(array) 에 모두 지정한 값으로 만들어 줍니다.
예시는 아래와 같습니다.
import numpy as np
list_np_full = np.full((2,3), 2)
print(list_np_full)
# 출력
# > [[2 2 2]
# [2 2 2]]
위의 내용은 2차원 배열 (2 dimensional array) 를 만들되, 이 모든 값을 2로 채워라 라는 뜻이 됩니다.
즉, 이 함수는 zeros() 와 ones() 와는 다르게 미리 차원 배열 을 생성하고 원하는 값으로 채우기 까지 할 수 있습니다.
numpy 배열 생성하기 - eye()
eye() 함수는 대각선으로 1을 채우고 나머지는 0으로 채웁니다.
다른 함수들과는 특수한 상황에 쓰입니다.
예시는 아래와 같습니다.
import numpy as np
list_np_eye = np.eye(4) # 4*4크기의 배열에서 대각선으로 1을채움
print(list_np_eye)
# 출력
# > [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]]
numpy 배열 변경하기 - reshape()
reshape() 함수는 만들어진 배열 (array) 의 차원을 변경할 수 있는 함수 입니다.
만일 요소의 타입이 ndarray 가 아니고 다른 타입 (list, tuple) 일 경우 오류가 발생합니다.
따라서 위의 오류가 뜰 경우 np.array() 함수로 ndarray 형태를 취한 뒤 접근해 주셔야 합니다.
예시는 아래와 같습니다.
import numpy as np
np_list = np.arange(16) # list생성
print('list = ',np_list) # reshape(행)
np_list_reshape2 = np_list.reshape(2,8) # 2차원으로 변형
print(f'\nreshape_list 2차원 변형 \n\n{np_list_reshape2}') # reshpe(행, 열)
np_list_reshape3 = np_list.reshape(2, 2, 4)
print(f'\nreshape_list 3차원 변형 \n\n{np_list_reshape3}') # reshape(높이, 행, 열)
# 출력
# list = [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
#
# reshape_list 2차원 변형
#
# [[ 0 1 2 3 4 5 6 7]
# [ 8 9 10 11 12 13 14 15]]
#
# reshape_list 3차원 변형
#
# [[[ 0 1 2 3]
# [ 4 5 6 7]]
#
# [[ 8 9 10 11]
# [12 13 14 15]]]
위의 내용을 확인해 보면, 차원을 생성할만한 요소가 충분하다면 다양한 차원으로 변경할 수 있다는 것을 알 수 있습니다.
여기에서 ndarray 말고 그냥 range 형태를 취한 형태로도 접근 할 수 있습니다.
import numpy as np
np_list_reshape2 = np.array(range(16)).reshape((2,8)) # 2차원으로 변형
print(f'\nreshape_list 2차원 변형 \n\n{np_list_reshape2}') # reshpe(행, 열)
np_list_reshape3 = np.array(range(16)).reshape((2, 2, 4))
print(f'\nreshape_list 3차원 변형 \n\n{np_list_reshape3}') # reshape(높이, 행, 열)
# 출력
# reshape_list 2차원 변형
#
# [[ 0 1 2 3 4 5 6 7]
# [ 8 9 10 11 12 13 14 15]]
#
# reshape_list 3차원 변형
#
# [[[ 0 1 2 3]
# [ 4 5 6 7]]
#
# [[ 8 9 10 11]
# [12 13 14 15]]]
결론
위의 내용 말고도 numpy 에서 제공하는 함수는 다양합니다.
거기에 최적화 까지 다 잘 해주셨기 때문에 저희는 이 함수들을 이용하여,
쉽게 과학 계산이나 데이터 변환을 할 수 있는것 같네요.
이상입니다.
'Language > Python' 카테고리의 다른 글
이미지 처리 기초 OpenCV와 Numpy로 이미지 다루기 (0) | 2024.01.11 |
---|---|
파이썬으로 OpenCV와 Numpy 를 활용하여 이미지 생성하기 (0) | 2024.01.09 |
OpenCV - [실습] OpenCV와 함께하는 파이썬 이미지 및 비디오 처리 기초 (1) | 2024.01.08 |
NUMPY - [실습] 배열 구조 활용 (axis) (0) | 2024.01.07 |
PYTHON - [개념] GIL (Global Interpreter Lock) 에 대해서 알아보자 (0) | 2024.01.02 |