파이썬 넘파이 배열 값 채우기 함수 비교
안녕하세요. 이번 글에서는 파이썬 넘파이에서 배열에 특정 값들을
채우는 함수들인 np.ones, np.zeros, np.ones_like, np.zeros_like의
사용법을 비교해보고, np.full과 np.zeros 함수도 살펴보겠습니다.
np.ones, np.zeros : 1 혹은 0으로 배열 채우기
np.ones와 np.zeros 내에 array의 shape을 입력해주면,
해당 크기에 맞추어 1 혹은 0으로 모든 값이 채워집니다.
import numpy as np
np.zeros(5) # array([0., 0., 0., 0., 0.])
np.zeros((2, 3))
# 결과
array([[0., 0., 0.],
[0., 0., 0.]])
np.ones((2, 2, 2))
# 결과
array([[[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.]]])
(2, 3), (2, 2, 2) 처럼 shape을 지정할 튜플을 input으로 넣어주시면 됩니다.
np.ones_like vs np.ones (np.zeros_like vs np.zeros)
_like로 끝나는 형태의 함수들도 넘파이 라이브러리에서 지원합니다.
np.ones와 np.ones_like의 차이는 shape을 직접 input으로 넣어주느냐 아니면
특정 shape을 가진 array를 넣어주느냐의 차이입니다.
np.zeros와 np.zeros_like의 차이도 위의 경우와 마찬가지라고 보실 수 있으며,
뒤에서 설명할 empty, full의 like 함수도 같은 원리가 적용됩니다.
a = np.array([1, 4, 3, 7, 9])
b = np.array([[1, 6, 7],[4, 5, 3]])
# shape 대신 array를 input
np.zeros_like(a) # array([0, 0, 0, 0, 0])
np.ones_like(b)
# 결과
array([[1, 1, 1],
[1, 1, 1]])
shape을 지정할 tuple이 아니라 array a, b가 직접 input으로 들어간 것을
확인해보실 수 있습니다.
np.full, np.empty : 특정 값 혹은 메모리 내 값으로 배열 채우기
np.ones, np.zeros 함수와 같은 원리로 동작하는 np.full, np.empty 함수도 있습니다.
np.full 함수는 shape과 채울 값 2가지를 input으로 지정해주시면,
지정한 값으로 해당 shape만큼 값이 채워진 array를 반환해줍니다.
np.empty 함수는 shape를 지정해주면 메모리 내 임의 값들을 받아
흔히 말하는 쓰레기 값으로 값이 채워진 array를 반환해줍니다.
원하는 조건의 random 초기화를 원하는 경우는 이 함수를 절대 사용하지 말고,
np.random 모듈의 함수를 사용해야합니다.
이 두 함수도 full_like, empty_like 형태의 사용도 가능합니다.
a = np.array([1, 4, 3, 7, 9])
b = np.array([[1, 6, 7],[4, 5, 3]])
np.full(6, 2.5) # array([2.5, 2.5, 2.5, 2.5, 2.5, 2.5])
np.full((3, 2), -4)
# 결과
array([[-4, -4],
[-4, -4],
[-4, -4]])
np.empty(3) # array([0.75, 0.75, 0. ]) -> 실행마다 달라짐
np.full_like(a, 3) # array([3, 3, 3, 3, 3])
np.empty_like(b)
# 결과(실행마다 달라짐)
array([[4612811918334230528, 4612811918334230528, 4612811918334230528],
[4612811918334230528, 4612811918334230528, 4612811918334230528]])
추가로, 해당 함수들에서 dtype인자로 np.float32, np.float64, np.int32, np.int64 등
자료형을 지정하는 것이 가능하니, 사용에 참고하시면 좋을 듯 합니다.
np.full_like(a, 3.3, dtype = np.float64)
#array([3.3, 3.3, 3.3, 3.3, 3.3])
np.full_like(a, 3.3, dtype = np.int32)
#array([3, 3, 3, 3, 3])
'Python > Numpy' 카테고리의 다른 글
[Numpy] 파이썬 대각 행렬, 대각 성분 추출 함수 np.diag 사용법 (0) | 2022.01.06 |
---|---|
[Numpy] 파이썬 원하는 자릿수까지 반올림, 올림, 내림 총정리 (0) | 2022.01.03 |
[Numpy] 벡터 norm 구하기, 벡터 정규화 함수 : np.linalg.norm(), LA.norm() 사용법 (0) | 2022.01.02 |