본문 바로가기
데이터 분석/데이터 전처리

[Numpy] 1. Numpy 배열 생성하기

by 부자 꽁냥이 2021. 9. 20.

안녕하세요~ 꽁냥이에요. Numpy 모듈은 배열의 조작 및 연산에 최적화되어 있을 뿐만 아니라 각종 통계량 계산, 결측값 처리 그리고 집계 등 데이터 전처리&분석과 관련된 유용한 기능을 제공합니다.

 

따라서 데이터 분석과 관련된 여러가지 유용한 Numpy 기능과 예제를 소개하려고 합니다. 이번 포스팅에서는 배열 생성에 대한 내용을 다루려고 합니다. 여기서 다루는 내용은 다음과 같습니다.

 

1. 기본

2. 특수 배열 생성하기


   1 기본

배열을 생성하는 기본적인 방법은 array를 이용하는 방법입니다. array에는 리스트나 튜플 객체를 인자로 받습니다. 아래 코드는 원소가 3개인 1차원 배열을 생성합니다.

 

a = np.array([1,2,3]) ## 또는 np.array((1,2,3))

 

 

Numpy는 1차원뿐만 아니라 2차원 배열 즉, 행렬도 생성할 수 있습니다. 아래와 같이 2중 리스트를 array인자에 넘겨주면 됩니다. 아래 코드는 2X3 행렬을 생성합니다.

 

A = np.array([[1,2,3],[4,5,6]])

 


   2 특수 배열 생성하기

- 영(0) 배열 -

Numpy에서는 모든 원소가 0인 벡터 또는 행렬을 만들어주는 기능이 있습니다. 바로 zeros라는 친구인데요. zeros는 1차원 0 벡터를 생성할 경우 양의 정수를, 2차원 0 행렬을 생성할 경우 행, 열 개수를 지정해줘야 합니다. 아래 코드는 길이가 4인 0 벡터를 생성합니다.

 

np.zeros(4)
# array([0., 0., 0., 0.])

 

아래 코드는 3X4 0 행렬을 생성합니다.

 

np.zeros((3,4))
# array([[0., 0., 0., 0.],
#        [0., 0., 0., 0.],
#        [0., 0., 0., 0.]])

 

Numpy에서는 주어진 배열과 똑같은 모양(Shape)의 0 벡터를 만들어주는 zeros_like라는 것이 있습니다. zero_like는 똑같은 모양으로 만들 배열을 인자로 받습니다.

 

a = np.array([1,2,3])
np.zeros_like(a)
# array([0, 0, 0])

A = np.array([[1,2,3],[4,5,6]])
np.zeros_like(A)
# array([[0, 0, 0],
#        [0, 0, 0]])

- 1(one) 배열 -

Numpy에서는 모든 원소가 1인 배열을 만들어 줍니다. 특정 길이 또는 차원의 1 배열을 만들기 위해선 ones, 특정 배열과 똑같은 모양의 1 배열을 만들기 위해선 ones_like를 사용합니다. 원리는 앞에서 다룬 zeros, zeros_like와 같습니다.

 

np.ones(3)
# array([1., 1., 1.])

np.ones((2,3))
# array([[1., 1., 1.],
#        [1., 1., 1.]])

 

a = np.array([1,2,4,5])
np.ones_like(a)
# array([1, 1, 1, 1])

A = np.array([[1,2,3],[4,5,6]])
np.ones_like(A)
# array([[1, 1, 1],
#        [1, 1, 1]])

- np.arange -

arange는 파이썬 내부에 있는 range와 비슷한 역할을 합니다.

 

np.arange(6)
# array([0, 1, 2, 3, 4, 5])

np.arange(2,6)
# array([2, 3, 4, 5])

 

arange의 세 번째 인자는 간격을 결정합니다. 주의할 점은 첫 번째 인자와 두 번째 인자의 값을 지정해줘야 올바르게 작동한다는 것입니다. 아래 코드는 1부터 20 사이의 값 중에서 1부터 시작하여 3씩 증가하는 배열을 만들어줍니다.

 

np.arange(1,20,3)
# array([ 1,  4,  7, 10, 13, 16, 19])

- np.linspace -

linspace는 시작점과 끝점을 포함하여 정해진 개수만큼 같은 간격을 갖는 배열을 생성해줍니다.

 

np.linspace(0,1,10)
# array([0.        , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
#        0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.        ])

 

만약 끝점을 포함하고 싶지 않다면 endpoint 인자를 False로 바꿔줍니다.

 

np.linspace(0,1,10, endpoint=False)
# array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

 


- np.empty - 

empty는 길이 또는 차원을 입력받아 해당 길이 또는 차원의 초기화되지 않은 배열을 생성합니다. empty는 이름과 달리 아무 값도 없는 것이 아니라 이상한 값이 출력되거나 가장 최근에 썼던 배열 값을 생성하기도 합니다.

 

np.empty(3)
# array([1.35453325e-311, 0.00000000e+000, 4.94065646e-324])

 

또한 empty_like를 이용하여 주어진 배열과 똑같은 모양을 만들 수 있습니다.

 

a = np.array([1,3,6])
np.empty_like(a)
# array([1416685024,        638, 1419378224])

 

empty는 배열의 값을 동적으로 할당할 때 초기 배열로 활용할 수 있습니다.

 

length = 5
a = np.empty(length)
for i in range(length):
    a[i] = (i**2)+4
    
# array([ 4.,  5.,  8., 13., 20.])

이번 포스팅에서는 배열 생성에 대한 내용을 알아보았습니다. 다음 포스팅에서는 배열 Slicing 대하여 알아보겠습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 


댓글


맨 위로