본문 바로가기
데이터 분석/기초

[Python] NumPy 라이브러리 기초 1

by hyeok1235 2022. 11. 21.

NumPy(Numerical Python)은 오픈소스 파이썬 라이브러리 중 하나로, 다차원 배열과 행렬 구조를 활용해 숫자 데이터를 다루기 쉽게 합니다. 다양한 수학적 연산을 지원하는 파이썬 라이브러리인 NumPy는 수학, 공학, 과학과 같은 분야에서 많이 사용됩니다. NumPy API는 Pandas, SciPy, MatPlotlib과 같은 데이터과학 관련 파이썬 패키지에서 많이 사용됩니다.

NumPy에서는 모든 요소가 같은 데이터 타입인 n차원 배열(Nth dimension array), ndarray라는 배열 객체를 제공합니다. 파이썬의 리스트와는 달리 모든 요소가 같은 데이터 타입이어야 한다는 제한 조건이 존재하는데, 이는 연산의 효율을 높이기 위함입니다. 데이터 타입이 모두 동일하기 때문에 데이터를 저장하고, 데이터 타입을 구별하기 위해 메모리를 사용하지 않아도 됩니다. 따라서 더 빠른 연산과 효율적으로 메모리 사용을 가능케 합니다.

① NumPy 호출하기

import numpy as np # numpy 모듈을 np라는 별칭으로 불러오기

 

② 배열 만들기

NumPy 배열을 만들기 위해서는 np.array() 함수를 사용하면 됩니다.

>>> import numpy as np
>>> a = np.array([1, 2, 3])


직접 요소를 나열하는 방법 외에도, 0으로만 구성된 배열, 1로만 구성된 배열, 또는 비어있는 배열을 생성할 수 있습니다. 비어있는 배열의 초기 요소들은 메모리에 있던 쓰레기 값(garbage value)가 저장됩니다.

>>> np.zeros(2)
array([0., 0.])
>>> np.ones(2)
array([1., 1.])
>>> np.empty(2)
array([4.41, 13.])


range()와 유사한 np.arange()를 통해서 숫자들의 범위를 지정해서 배열을 생성할 수 있습니다. 이때 시작하는 숫자, 끝나는 숫자, 숫자 간의 간격을 구체적으로 명시할 수 있습니다.

>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(2, 9, 3)
array([2, 5, 8])



③ 배열의 인덱싱

기본적으로 파이썬의 인덱싱 방법을 사용할 수 있습니다. 특별하게 NumPy의 배열에서 사용할 수 있는 인덱싱 방법 중 하나는, 원하는 조건을 만족하는 요소만 선택하는 Boolean Indexing입니다.

>>> a = np.array([[3, 2, 4, 5], [1, 6, 8, 7]])
>>> print(a < 4)
[[ True True False False]
 [ True False False False]]
>>> print(a[a < 4])		# 해당 Boolean의 True 요소에 해당하는 index만을 조회
[3 2 1]
>>> b = a[(a > 2) & (a < 6)]
>>> print(b)
[3 4 5]


추가적으로 Index 배열을 넣어서 요소를 선택하는 Fancy Indexing 방식도 존재합니다.

>>> a = np.array([3, 2, 4, 5, 1, 6, 7])
>>> print(a[[1, 3, 5]])
[2 5 6]

 

④ 배열의 속성

- ndarray.ndim = 배열의 축과 차원의 개수를 알려줍니다.
- ndarray.size = 배열의 요소의 개수를 알려준다. shape 속성의 곱과 동일합니다.
- ndarray.shape = 배열의 각 차원에 저장된 요소들의 갯수를 튜플 형태로 알려줍니다.

>>> array_example = np.array([[[0, 1, 2, 3],
				  [4, 5, 6, 7]],

				 [[0, 1, 2, 3],
				  [4, 5, 6, 7]],

				 [[0, 1, 2, 3],
				  [4, 5, 6, 7]]])
>>> array_example.ndim
3
>>> array_example.size
24
>>> array_example.shape
(3, 2, 4)

 

⑤ 배열의 요소 추가/삭제/정렬

배열 요소의 추가np.concatenate() 함수를 통해 가능합니다.

>>> x = np.array([[1, 2], [3, 4]])
>>> y = np.array([[5, 6]])
>>> np.concatenate((x, y))
array([[1, 2],
		 [3, 4],
		 [5, 6]])


배열 요소의 삭제는 인덱싱을 사용해서 원하는 요소를 유지하는 것이 훨씬 단순합니다.

배열 요소의 정렬은 파이썬의 sort 함수와 유사한 np.sort() 함수를 통해 가능합니다.
배열 요소를 변경하지 않고 배열의 형태만 바꾸는 arr.reshape() 메소드도 있습니다.

>>> a = np.arange(6)
>>> print(a)
[0 1 2 3 4 5]
>>> b = a.reshape(3, 2)
>>> print(b)
[[0 1]
 [2 3]
 [4 5]]

 

728x90
반응형