ndarray의 데이터 인덱싱의 종류를 알아보고 종류별 사용 방법에 대해서 알아보자.
1. 특정 위치의 단일값 추출
2. 슬라이싱
3. 팬시 인덱싱 - [링크 클릭]
4. Boolean 인덱싱 - [링크 클릭]
네가지 인덱싱에 대해서 알아보고 예제를 작성해 보도록 한다.
팬시 인덱싱과 Boolean 인덱싱을 바로 알아보고 싶은 분은 링크 클릭
1. 단일 값 추출
1) 1차원 단일 값 추출
ndarray는 axis를 기준으로 0부터 시작하는 위치 인덱스 값을 가지고 있다.
해당 인덱스 값을 [](대괄호) 안에 명시해서 단일 값을 추출할 수 있다.
파이썬을 사용하면 단일 값 추출 할 경우, -(마이너스)를 입력하게 되면 뒤에서 부터 위치를 지정하게 된다.
(가장 오른쪽이 -1부터 시작합니다.)
소스 코드
# 1) 단일값 추출 : 1차원
array1 = np.arange(start=1, stop=11) # 1부터 10까지 (11은 미포함)
print('array1:\n', array1)
print('array1[0]:', array1[0])
print('array1[9]:', array1[9])
결과
array1:
[ 1 2 3 4 5 6 7 8 9 10]
array1[0]: 1
array1[9]: 10
파이썬 사용자는 -(마이너스)로 단일 값 추출하는 방법을 알 것이다. 모두가 알겠지만 한번더 확인해보자.
소스 코드
# 마이너스로 사용 가능합니다. (파이썬)
print('array1[-1]:', array1[-1])
print('array1[-10]:', array1[-10])
# len() 함수로 길이에서 마이너스 해서 사용하는 것에서 비롯되지 않았나 생각합니다.
print('array1[len(array1)-1]:', array1[len(array1)-1])
print('array1[len(array1)-10]:', array1[len(array1)-10])
결과
array1[-1]: 10
array1[-10]: 1
array1[len(array1)-1]: 10
array1[len(array1)-10]: 1
처음에 -1으로 값을 찾아오는게 헷갈려서, 외우는 방법은 len-1하는 방식으로 찾아오는 방법에서, len을 빼면된다.
밑에 2가지 방법이 기존 다른 언어에서 사용하던 방법이라면, 파이썬에서는 위 2가지 방법으로 사용하면 편리하다.
2) 2차원 단일 값 추출
2차원 단일 값 추출도 사실 익숙한 방법이다. 우리가 리스트나 배열을 다차원으로 진행하면 값을 불러올때 사용방법을 생각해보면된다.
조금의 차이가 있다면, 2차원 단일 값 추출에서도 마이너스(-)를 사용해서 값을 불러올 수 있다.
소스 코드
# 2) 단일값 추출 : 2차원
array1d = np.arange(start=1, stop=10) # 1부터 9까지 (10 미포함)
array2d = array1d.reshape(3, 3) # shape 변경
print('array2d:\n', array2d)
print('array2d[0, 0]:\n', array2d[0, 0])
print('array2d[0, 1]:\n', array2d[0, 1])
print('array2d[2, 2]:\n', array2d[1, 2])
print('array2d[2, 2]:\n', array2d[2, 2])
print('array2d[-1, -1]:\n', array2d[-1, -1]) # 2차원도 마이너스 단일값 추출 가능
결과
array2d:
[[1 2 3]
[4 5 6]
[7 8 9]]
array2d[0, 0]:
1
array2d[0, 1]:
2
array2d[2, 2]:
6
array2d[2, 2]:
9
array2d[-1, -1]:
9
2. 슬라이싱
슬라이싱은 : 을 이용해서 연속 숫자를 나타낸다.
파이썬에서 자주 사용했던 방식 중 하나이다.
1) 1차원 슬라이싱
물론, 파이썬의 슬라이싱과 동일하지만 한번 더 살펴보도록 하자.
소스 코드
import numpy as np
# 1) 슬라이싱 추출 : 1차원
array1 = np.arange(start=1, stop=11) # 1부터 10까지 (11은 미포함)
print('array1:\n', array1)
print('array1[:]:', array1[:])
print('array1[1:5]:', array1[1:5])
print('array1[4:]:', array1[4:])
print('array1[:6]:', array1[:6])
# 마이너스로 사용 가능합니다. (파이썬)
print('array1[:-3]:', array1[:-3])
print('array1[-8:]:', array1[-8:])
결과
array1:
[ 1 2 3 4 5 6 7 8 9 10]
array1[:]: [ 1 2 3 4 5 6 7 8 9 10]
array1[1:5]: [2 3 4 5]
array1[4:]: [ 5 6 7 8 9 10]
array1[:6]: [1 2 3 4 5 6]
array1[:-3]: [1 2 3 4 5 6 7]
array1[-8:]: [ 3 4 5 6 7 8 9 10]
예제를 보면 쉽게 이해할 수 있다. 실수 하기 쉬운 부분은 [ :7] 이라고 하면 7번째 인덱스는 미포함되는 것이다.
[:6]이라고 하면 6번째 인덱스를 미포함하고 1~5의 인덱스 값을 가지고 온다.
2) 2차원 슬라이싱
2차원도 사실 1차원과 다를게 없다. 동일하게 사용하면 된다. 2차원 역시 -(마이너스)값을 사용 가능하다.
소스 코드
# 2) 슬라이싱 추출 : 2차원
array1d = np.arange(start=1, stop=10) # 1부터 9까지 (10 미포함)
array2d = array1d.reshape(3, 3) # shape 변경
print('array2d:\n', array2d)
print('array2d[0:, 0:]:\n', array2d[0:, 0:])
print('array2d[0:, :1]:\n', array2d[0:, :1])
print('array2d[0:, 1:]:\n', array2d[0:, 1:])
print('array2d[:-1, :-1]:\n', array2d[:-1, :-1]) # 2차원도 마이너스 단일값 추출 가능
결과
array2d:
[[1 2 3]
[4 5 6]
[7 8 9]]
array2d[0:, 0:]:
[[1 2 3]
[4 5 6]
[7 8 9]]
array2d[0:, :1]:
[[1]
[4]
[7]]
array2d[0:, 1:]:
[[2 3]
[5 6]
[8 9]]
array2d[:-1, :-1]:
[[1 2]
[4 5]]
'머신러닝 > 넘파이' 카테고리의 다른 글
[Numpy] 리스트 ndarray 변환 함수 - tolist(), np.array() (0) | 2021.08.23 |
---|---|
[Numpy] ndarray 인덱싱(Indexing) 종류와 사용방법(2) - 팬시 인덱싱 (0) | 2021.08.23 |
[Numpy] ndarray 크기 변경 reshape() (0) | 2021.08.21 |
[Numpy] array 생성함수 - arange, ones, zeros, empty (0) | 2021.08.10 |
[Numpy] ndarray 의 axis 축 개념 및 소스 코드 예제 (0) | 2021.08.10 |