일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 사회조사분석사 2급 필기 시험시간
- 현대엔지니어링 수요예측
- 파이썬 정렬
- 머신러닝
- 2월공모주
- 사회조사분석사2급실기신청
- 공모주청약
- 사회조사분석사 2급 공부방법
- BFS
- 오미크론 자가격리
- 사회조사분석사 2급
- 너비우선탐색
- DFS
- 사회조사분석사 2급 접수
- 정렬
- 사회조사분석사2급실기신청꿀팁
- 사회조사분석사 2급 필기 요약정리
- 사회조사분석사 2급 필기 공부방법
- 사회조사분석사 2급 독학
- 공모주
- 벽부수고이동하기 파이썬
- 사회조사분석사 2급 기출문제집
- 그리디
- 사이킷런
- 현대엔지니어링
- 알고리즘
- 공모주 청약
- 시물레이션
- 백준
- 백준 알고리즘
- Today
- Total
세상을 바꾸는 데이터
[Numpy] 넘파이 - 인덱싱(Indexing) 본문
넘파이에서 ndarray내의 일부 데이터 세트나 특정 데이터만을 선택할 수 있도록 하는 인덱싱에 대해 알아보자.
Numpy 모듈 import
import numpy as np
1차원 ndarray에서 단일 값 추출
1개의 데이터값을 선택하려면 ndarray 객체에 해당하는 위치의 인덱스 값을 [ ] 안에 입력하면 된다.
# 1에서 부터 9까지의 1차원 ndarray 생성
array1 = np.arange(start=1, stop=10)
print("array1의 데이터:", array1) # array1의 데이터: [1 2 3 4 5 6 7 8 9]
# index(인덱스)는 0부터 시작하므로 array1[4]는 5번째 위치의 데이터값을 의미
value = array1[4]
print('array1[4]의 값:', value) # array1[4]의 값: 5
인덱스에 마이너스 기호를 이용하면 맨 뒤에서부터 데이터를 추출할 수 있다.
print('맨 뒤의 값:', array1[-1], ', 맨 뒤에서 두번째 값:', array1[-2])
# 맨 뒤의 값: 9 , 맨 뒤에서 두번째 값: 8
단일 인덱스를 이용해 ndarray 내의 데이터 값을 간단히 수정할 수 있다.
array1[0] = 9 # 0번째 인덱스 값을 9로 수정
array1[8] = 0 # 8번째 인덱스 값을 0으로 수정
print('array1:',array1) # array1: [9 1 2 3 4 5 6 7 0 9]
2차원 ndarray에서 단일 값 추출
1차원과 2차원 ndarray내에서의 데이터 접근의 차이는 2차원의 경우 콤마( , )로 분리된 로우와 칼럼 위치의 인덱스를 통해 접근하는 것이다.
array1d = np.arange(start=1, stop=10) # 1부터 9까지의 데이터 순차적으로 생성
array2d = array1d.reshape(3,3) # 1차원 배열을 2차원 3x3 배열로 변경
print(array2d)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
print('(row=0,col=0) index 가리키는 값:', array2d[0,0] ) # 1
print('(row=0,col=1) index 가리키는 값:', array2d[0,1] ) # 2
print('(row=1,col=0) index 가리키는 값:', array2d[1,0] ) # 4
print('(row=2,col=2) index 가리키는 값:', array2d[2,2] ) # 9
슬라이싱(Slicing)
' : ' 기호를 이용해 연속한 데이터를 슬라이싱해서 추출할 수 있다. ' : ' 사이에 시작 인덱스와 종료 인덱스를 표시하면 시작 인덱스에서 종료 인덱스 -1의 위치에 있는 데이터의 ndarray를 반환한다.
array1 = np.arange(start=1, stop=10)
print(array1) # [1 2 3 4 5 6 7 8 9]
array3 = array1[0:3]
print(array3) # [1 2,3]
array4 = array1[:3]
print(array4) # [1 2 3]
array5 = array1[3:]
print(array5) # [4 5 6 7 8 9]
array6 = array1[:]
print(array6) # [1 2 3 4 5 6 7 8 9]
2차원 ndarray에서 슬라이싱은 1차원 ndarray에서의 슬라이싱과 유사하며 콤마( , )로 구분하는 부분만 다르다.
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3) # 3x3 2차원 배열로 변환
print('array2d:\n',array2d)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
print('array2d[0:2, 0:2] \n', array2d[0:2, 0:2])
# [[1 2]
# [4 5]]
print('array2d[1:3, :] \n', array2d[1:3, :])
# [[4 5 6]
# [7 8 9]]
print('array2d[:2, 1:] \n', array2d[:2, 1:])
# [[2 3]
# [5 6]]
펜시 인덱싱(fancy indexing)
펜시 인덱싱(fancy indexing)은 리스트나 ndarray로 인덱스 집합을 지정하면 해당 위치의 인덱스에 해당하는 ndarray를 반환하는 인덱싱 방식이다.
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3) # 3x3 2차원 배열
print(array2d)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
array3 = array2d[[0,1], 2]
print('array2d[[0,1], 2] => ',array3.tolist())
# [3 6]
array4 = array2d[[0,2], 0:2]
print('array2d[[0,2], 0:2] => ',array4.tolist())
# [[1 2], [4 5]]
array5 = array2d[[0,1]]
print('array2d[[0,1]] => ',array5.tolist())
# [[1 2 3], [4 5 6]]
불린 인덱싱(Boolean indexing)
불린 인덱싱(Boolean Indexing)은 조건 필러팅과 검색을 동시에 할 수 있기에 매우 자주 사용되는 인덱싱 방식이다. ndarray의 인덱스를 지정하는 [ ] 내에 조건문을 기재하면 된다.
array1d = np.arange(start=1, stop=10)
print(array1d > 5) # [False False False False False True True True True]
print(array1d[array1d > 5]) # [6 7 8 9]
다음 포스팅에서는 numpy의 행렬에 대해 자세히 알아보고자 한다.
Reference
https://github.com/chulminkw/PerfectGuide
https://www.youtube.com/watch?v=_cZ-uLFHP_E
https://iq.opengenus.org/2d-array-in-numpy/
https://scipy-lectures.org/intro/numpy/array_object.html
https://rfriend.tistory.com/292
'ML > Numpy' 카테고리의 다른 글
[Numpy] 넘파이 - 행렬(Matrix) (1) | 2022.01.19 |
---|---|
[Numpy] 넘파이 - ndarray 생성 및 데이터 타입 (2) | 2022.01.17 |
[Numpy] Intro (2) | 2022.01.17 |