Python

[NumPy] 배열 생성

주댕이 2024. 1. 17. 09:50

# 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