파이썬 넘파이(Numpy) 함수 총정리1 : 배열 생성 및 초기화 방법

데이터 분석을 시작할 때, 가장 먼저 하는 작업은 데이터를 넘파이 배열 형태로 만드는 것입니다. 넘파이의 가장 큰 장점이 리스트보다 훨씬 빠르고 효율적으로 다차원 배열(ndarray)을 생성하고 다룰 수 있다는 점이기 때문입니다. 

이 글에서는 넘파이 함수 총정리 제 1탄으로, 데이터 분석을 할 때 자주 사용되는 넘파이 배열 생성 및 초기화 함수들에 대해서 정리해 보도록 하겠습니다. 


넘파이 배열 생성 함수 총정리
넘파이(Numpy) 배열 생성 함수


01. 기본 배열 생성 함수

1) np.array(object, dtype=None, ndmin=0)

  • 가장 기본이 되는 함수로, 데이터를 넘파이 배열 객체로 변환해주는 함수입니다.
    • object : 배열로 만들고 싶은 데이터 (리스트, 튜플, 다른 배열 등)
    • dtype : 배열 요소의 데이터 타입을 지정함
    • ndmin : 생성되는 배열의 최소 차원을 지정함

data_list = [1, 2, 3]
a = np.array(data_list)
b = np.array(data_list, dtype=float, ndmin=3)

print(a, a.dtype, a.ndim)     # 결과: [1 2 3]        int64   1
print(b, b.dtype, b.ndim)     # 결과: [[[1. 2. 3.]]] float64 3

print(type(data_list))        # 결과: <class 'list'>
print(type(a))                # 결과: <class 'numpy.ndarray'>
print(type(b))                # 결과: <class 'numpy.ndarray'>

02. 범위와 간격을 이용한 배열 생성 함수

연속된 숫자나 일정한 간격의 숫자가 필요할 때 사용되는 배열 생성 함수들입니다. 


1) np.arange(start, stop ,step)  

  • 값의 범위를 지정하여 1차원 배열을 생성합니다. 
    • start : 시작값 (생략가능)
    • stop : 마지막값 (결과에 포함되지 않음)
    • step : 숫자 사이의 간격 (기본값 : 1)

print(np.arange(4))           # 결과: [0 1 2 3]
print(np.arange(2, 10, 2))    # 결과: [2 4 6 8]


2) np.linspace(start, stop, num=50, endpoint=True, retstep=False

  • 균등한 간격으로 나눈 숫자들의 배열을 생성합니다. 
    • start : 시작값
    • stop : 마지막값 
    • num : 생성할 샘플의 개수 (기본값 : 50)
    • endpoint : True이면 마지막 값 포함, False이면 미포함 (기본값 : True)
    • retstep : True이면 배열과 함께 샘플 사이의 간격값을 반환함 (기본값 : False)

a = np.linspace(1, 9, 5)
arr, step = np.linspace(1, 9, 5, endpoint=True, retstep=True)

print(a)       # 결과: [1. 3. 5. 7. 9.]
print(arr)     # 결과: [1. 3. 5. 7. 9.]
print(step)    # 결과: 2.0


03. 특정 값으로 채워진 배열 생성 함수 함수

특정 크기의 배열을 특정 값으로 초기화 하여 생성하거나, 난수값으로 채워 배열을 생성하고자 할 때 사용되는 함수들입니다. 


1) np.zeros(shape, dtype=float)

  • 값이 0으로 채워진 배열을 생성합니다. 

print(np.zeros(shape=(2), dtype=int))   # 결과: [0 0]
print(np.zeros((2, 3), int))            # 결과: [[0 0 0][0 0 0]]
print(np.zeros((2, 2)))                 # 결과: [[0. 0.][0. 0.]]

2) np.ones(shape, dtype=float)

  • 값이 1로 채워진 배열을 생성합니다. 

print(np.ones((2, 3), int))    # 결과: [[1 1 1][1 1 1]]


3) np.empty(shape, dtype=float)

  • 기존 메모리에 있는 데이터(쓰레기 값)로 채워진 배열을 생성합니다. 

print(np.empty((1, 3), int))   # 결과: [[723~673 723~673 723~673]]


4) np.full(shape, fill_value

  • fill_value값으로 채운 배열을 생성합니다. 

print(np.full((2, 3), 7))      # 결과 : [[7 7 7][7 7 7]]

5) np.identity(n, dtype

  • n x n의 단위행렬을 생성합니다 (주 대각선의 원소가 1이고 나머지는 0인 정사각 행렬)

print(np.identity(3, int))     # 결과: [[1 0 0][0 1 0][0 0 1]]

6) np.eye(N, M, k, dtype=float

  • N x M 행렬을 생성합니다.
    • M : M지정시 N x M 행렬을 생성합니다. (미지정시 N x N 행렬 생성함)
    • k : 대각선 1의 시작 위치를 k만큼 오른쪽으로 이동합니다.
print(np.eye(N=2, M=3, k=0, dtype=int))  # 결과: [[1 0 0][0 1 0]]
print(np.eye(2, 3, 1, int))              # 결과: [[0 1 0][0 0 1]]

7) np.random.randint(low, high, size, dtype=int

  • low ~ (high-1)까지의 정수로 된 난수값을 가진 배열을 생성합니다. 

print(np.random.randint(1, 10, (2, 3)))  # 결과: [[7 9 3][3 1 4]]

8) np.random.rand(d0, d1, ..., dn

  • 0~1미만의 구간에서 균등 분포를 따르는 난수값으로 채워진 배열을 생성합니다. 
    • dn의 개수 : 차원의 수
    • dn의 크기 : 각 차원의 크기
    • np.random.rand(2, 3, 4) : 3차원 난수 배열 생성 (rank=2, row=3, col=4)
print(np.random.rand(2))        # 결과:   [0.851283  0.3073841]

print(np.random.rand(3, 2))     # 결과:  [[0.1128348 0.6198794]
                                #         [0.9819788 0.2894202]
                                #         [0.4824393 0.4228719]]
                                
print(np.random.rand(2, 3, 2))  # 결과: [[[0.1139333 0.9592168]
                                #         [0.4004966 0.6440855]
                                #         [0.5542145 0.7088754]]
                                #        [[0.7294209 0.9031848]
                                #         [0.0751762 0.8855620]
                                #         [0.0342402 0.4584337]]]

9) np.random.randn(d0, d1, ..., dn

  • 표준 정규분포를 따르는 난수값으로 채워진 배열을 생성합니다. 
    • dn의 개수 : 차원의 수
    • dn의 크기 : 각 차원의 크기
    • np.random.randn(2, 3, 4) : 3차원 난수 배열 생성 (rank=2, row=3, col=4)
print(np.random.randn(2))       # 결과:   [-1.8772353  0.8843650]

print(np.random.randn(3, 2))    # 결과:  [[ 0.8511536 -0.1653447]
                                #         [-2.1221342  1.4915730]
                                #         [ 0.2264404 -1.0682106]]

print(np.random.randn(2, 3, 2)) # 결과: [[[ 0.9873087  -0.3018148]
                                #         [-0.8701549  1.4917594]
                                #         [ 0.2682013 -1.1328266]]
                                #        [[-0.0667150  1.0603172]
                                #         [-0.4717520  2.6099298]
                                #         [ 0.3502580  1.6179725]]]


04. 기존 배열의 구조를 가진 배열 생성 함수

기존에 있는 어떤 배열과 똑같은 모양(Shape)과 데이터 타입을 가진 배열을 특정 값으로 초기화 하여 생성하고자 할 때 사용됩니다. 


1) np.zeros_like(ndarray

  • ndarray와 같은 shape과 dtype을 가지고, 0으로 채워진 배열을 생성합니다.


2) np.ones_like(ndarray

  • ndarray와 같은 shape과 dtype을 가지고, 1로 채워진 배열을 생성합니다.


3) np.empty_like(ndarray

  • ndarray와 같은 shape과 dtype을 가지고, 쓰레기 값으로 채워진 배열을 생성합니다.


4) np.full_like(ndarray, fill_value

  • ndarray와 같은 shape과 dtype을 가지고, fill_value값으로 채워진 배열을 생성합니다. 


Previous Post
No Comment
Add Comment
comment url