반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.

 

Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.

 

<Numpy 패키지 관련 이전 글>

 

2021.06.16 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념


 

ndarray의 인덱싱과 슬라이싱

 

이미 이 글을 읽으시는 분들은 파이썬 기초 문법을 공부하시면서 리스트의 인덱싱과 슬라이싱에 대해서 한 번쯤 들어보셨을 것이라 생각됩니다. 기본적으로 ndarray의 인덱싱, 슬라이싱도 리스트와 같은 규칙을 따릅니다. 

 

2021.03.12 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 4편_리스트 자료형

 

따라서 1차원 array의 인덱싱은 리스트 문법 글로 대신하고, 2차원 array에 대해서만 간단히 정리하고 넘어가겠습니다.

 

 

2차원 array의 인덱싱과 슬라이싱

 

기초문법 강의에서는 자세히 다루지 않았었지만 리스트 안에는 리스트가 들어갈 수 있습니다. 이런 식으로 말이죠.

 

arr_list = [[1,2,3],[4,5,6],[7,8,9]]

print(arr_list[0][2])    # 리스트의 0번 인덱스 안의 2번 인덱스
>>> 3

print(arr_list[2][0])    # 리스트의 2번 인덱스 안의 0번 인덱스
>>> 7

 

이 리스트를 numpy.array( ) 안에 넣어서 ndarray를 만들면 그것이 바로 행렬(matrix)가 되며, 거의 동일하게 인덱싱할 수 있습니다.

 

arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])

# 1행, 3열  --> 3
arr_2d[0,2]

# 3행, 1열  --> 7
arr_2d[2,0]

 

비슷한 개념의 슬라이싱도 해볼까요? 이미 아시겠지만 슬라이싱이란 간단히 '범위 인덱싱'이라고 생각하시면 됩니다.

참고로 슬라이싱의 0:2가 뜻하는 것은 0이상 2이하라는 뜻입니다.

 

# 2행 모두  --> array([4,5,6])
arr_2d[1, :]

# 1열 모두 --> array([1,4,7])
arr_2d[:, 0]

# 3행의 1,2열 --> array([4,5])
print(arr_2d[2,0:2])

# 1,2행의 1,2열 --> array([1,2],[4,5])
print(arr_2d[0:2,0:2]

 

 

fancy indexing

 

fancy는 동사로 원하다, 끌리다라는 뜻이 있죠. 대충 원하는거 골라서 다 가져오겠다라는 뜻으로 해석됩니다.

말로 표현해보려다 실패하고 코드로 설명드려 보겠습니다. 

 

arr = np.array([10,20,30,40,50])

# 보통 인덱싱
arr[1]
>>> 20

# 팬시 인덱싱
arr[[0,2,4]]
>>> 10, 30, 50

 

여기서 주의하실 점은 꼭 [ ]를 한 번 더 써주셔야 한다는 것입니다. 그냥 arr[0,2,4] 이런 식으로 하시면 에러가 납니다.

당연히 리스트를 담은 변수를 넣어줘도 됩니다. arr[리스트] 이런 식으로 말이죠.

 

 

Bollean indexing

 

ndarray의 장점은 ndarray에 조건문을 적용하면 모든 값에 개별적으로 적용되어 그 결과를 True와 False로 돌려준다는 것입니다.

그렇게 나온 결과 array를 위에서 배운 fancy indexing 처럼 그대로 array[ ] 안에 넣어주면 해당 인덱스가 True인 값만 출력해줍니다.

 

이 개념은 데이터 분석에서 아주아주 유용하게 사용되므로 잘 이해하고 넘어가시는 것을 추천드립니다.

 

arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])

arr_2d

>>> array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])

# Boolean indexing

arr_2d > 2

>>> array([[False, False,  True],
          [ True,  True,  True],
          [ True,  True,  True]])


# Boolean indexing 사용법

arr2d[arr2d > 5]

>>> array([6, 7, 8, 9])

 

조금 특이한 점은 2차원 배열도 Boolean indexing을 통해 값을 얻으면 1차원 배열로 값을 출력한다는 것입니다.

 

다음 시간에는 numpy의 정렬과 사칙연산에 대해서 공부해보겠습니다.


<참고자료>

 

패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

반응형

+ Recent posts