Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
11-21 17:48
관리 메뉴

hamlet-story

NUMPY - [실습] 배열 구조 표현 본문

Language/Python

NUMPY - [실습] 배열 구조 표현

hamlet-story 2024. 1. 6. 07:00

기존에 배웠던 차원 배열 개념을 이용해서 어떻게 하면 좀더 이해하기 쉬울까 생각을 하였습니다.

그래서 이번에는 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 에서 제공하는 함수는 다양합니다.

거기에 최적화 까지 다 잘 해주셨기 때문에 저희는 이 함수들을 이용하여,

쉽게 과학 계산이나 데이터 변환을 할 수 있는것 같네요.

 

이상입니다.