파이썬 넘파이(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값으로 채워진 배열을 생성합니다.
