# NumPy
- 파이썬으로 과학 연산을 쉽고 빠르게 할 수 있게 만든 패키지
- 다차원 배열 데이터를 효과적으로 처리할 수 있다.
# NumPy 패키지 불러오기
import numpy as np
# 시퀀스 데이터로부터 배열 생성하기
arr_obj = np.array(seq_data)
# 정수로 구성된 리스트로 배열 생성하기
data1 = [0, 1, 2, 3, 4, 5]
a1 = np.array(data1)
a1 # array([0, 1, 2, 3, 4, 5])
a1.dtype # dtype('int32')
# 정수와 실수가 혼합된 리스트로 배열 생성하기
data2 = [0.1, 5, 4, 12, 0.5]
a2 = np.array(data2)
a2 # array([ 0.1, 5. , 4. , 12. , 0.5])
a2.dtype # dtype('float64')
# array()에 리스트 데이터를 직접 넣어서 배열 생성하기
np.array([0.5, 2, 0.01, 8]) # array([0.5 , 2. , 0.01, 8. ])
# 다차원 배열 생성하기
np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
# 범위를 지정해 배열 생성하기
arr_obj = np.arange([start,] stop[,step])
np.arange(0, 10, 2) # array([0, 2, 4, 6, 8])
np.arange(1, 10) # array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(5) # array([1, 2, 3, 4, 5])
# 1차원 배열을 다차원 배열로 변경하기
np.arange(12).reshape(4, 3)
# array([[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8],
# [ 9, 10, 11]])
# 배열의 형태 확인하기
b1 = np.arange(12).reshape(4, 3)
b1.shape # (4, 3)
b2 = np.arange(5)
b2.shape # (5,)
- 범위의 시작과 끝을 지정하고 데이터의 개수를 지정하여 NumPy 배열 생성하기
arr_obj = np.linspace(start, stop[, num])
# 1부터 10까지 10개의 데이터 생성
np.linspace(1, 10, 10) # array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
# 0부터 파이까지 동일한 간격으로 나눈 20개의 데이터 생성
np.linspace(0, np.pi, 20)
# array([0. , 0.16534698, 0.33069396, 0.49604095, 0.66138793,
# 0.82673491, 0.99208189, 1.15742887, 1.32277585, 1.48812284,
# 1.65346982, 1.8188168 , 1.98416378, 2.14951076, 2.31485774,
# 2.48020473, 2.64555171, 2.81089869, 2.97624567, 3.14159265])
# 특별한 형태의 배열 생성
- 모든 원소가 0 또는 1인 다차원 배열 만들기
# 모든 원소가 0인 다차원 배열 생성
arr_zero_n = np.zeros(n)
arr_zero_mxn = np.zeros((m, n))
np.zeros(10) # array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((2, 2))
# array([[0., 0.],
# [0., 0.]])
# 모든 원소가 1인 다차원 배열 생성
arr_one_n = np.ones(n)
arr_one_mxn = np.ones((m, n))
np.ones(10) # array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.ones((2, 2))
# array([[1., 1.],
# [1., 1.]])
- 단위행렬 생성하기
- 단위행렬: n x n인 정사각형 행렬에서 주 대각선이 모두 1이고 나머지는 0인 행렬
arr_I = np.eye(n)
# 3 x 3 단위행렬 생성
np.eye(3)
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
# 배열의 데이터 타입 변환
- NumPy 데이터의 형식
기호 | 의미 |
'b' | bool, 불 |
'i' | (signed) integer, 기호가 있는 정수 |
'u' | unsigned integer, 기호가 없는 정수 |
'f' | floating-point, 실수 |
'c' | complex-floating point, 복소수 |
'M' | datetime, 날짜 |
'O' | (Python) objects, 파이썬 객체 |
'S' 또는 'a' | (byte) string, 바이트 문자열 |
'U' | Unicode, 유니코드 |
- NumPy 배열의 형 변환
num_arr = str_arr.astype(dtype)
# 문자열을 실수로 변환
str_a1 = np.array(['1.567', '0.123', '5.123', '9', '8'])
num_a1 = str_a1.astype(float)
num_a1 # array([1.567, 0.123, 5.123, 9. , 8. ])
str_a1.dtype # dtype('<U5')
num_al.dtype # dtype('float64')
# 문자열을 정수로 변환
str_a2 = np.array(['1', '3', '5', '7', '9'])
num_a2 = str_a2.astype(int)
num_a2 # array([1, 3, 5, 7, 9])
str_a2.dtype # dtype('<U1')
num_a2.dtype # dtype('int32')
# 실수를 정수로 변환
num_f1 = np.array([10, 21, 0.549, 4.75, 5.98])
num_i1 = num_f1.astype(int)
num_i1 # array([10, 21, 0, 4, 5])
num_f1.dtype # dtype('float64')
num_i1.dtype # dtype('int32')
# 난수 배열 생성
- [0, 1) 사이의 실수로 난수 배열 생성하기
rand_num = np.random.rand([d0, d1, ..., dn])
np.random.rand(2, 3)
# array([[0.59143019, 0.56236364, 0.1008636 ],
# [0.56863234, 0.91028267, 0.49025599]])
np.random.rand() # 0.8965329273644997
np.random.rand(2, 2, 4)
# array([[[0.68690317, 0.82143052, 0.7714933 , 0.97834349],
# [0.66413284, 0.24827805, 0.8329693 , 0.23968574]],
#
# [[0.4152737 , 0.97551317, 0.67684613, 0.5939142 ],
# [0.87149991, 0.97759209, 0.4083724 , 0.88662253]]])
- 지정한 범위에 해당하는 정수로 난수 배열 생성하기
rand_num = np.random.randint([low,] high [,size])
np.random.randint(10, size=(3, 4))
# array([[0, 7, 9, 5],
# [4, 7, 6, 8],
# [6, 5, 5, 8]])
np.random.randint(1, 100, 10) # array([15, 50, 95, 13, 35, 86, 59, 38, 7, 12])
728x90
'Python' 카테고리의 다른 글
[NumPy] 배열의 연산 (0) | 2024.01.17 |
---|---|
[NumPy] np.random.randint를 이용하여 로또 번호 생성기 만들기 (0) | 2024.01.17 |
[Python] 가상 환경 사용하기 (2) | 2024.01.16 |
[Python] 클래스 상속 (0) | 2024.01.12 |
[Python] Docstring (0) | 2024.01.12 |