인덱싱(indexing): 배열의 위치나 조건을 지정해 배열의 원소를 선택하는 것슬라이싱(slicing): 범위를 지정해 배열의 원소를 선택하는 것
arr1 = np.arange(1, 11)
arr1
- 출력
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 0번째 요소
arr1[0]
- 출력
np.int64(1)
# 마지막 요소
arr1[-1]
- 출력
np.int64(10)
# 1, 3, 4번째 요소
arr1[[1, 3, 4]]
- 출력
array([2, 4, 5])
arr2 = np.arange(1, 13).reshape(3, 4)
arr2
- 출력
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
# 2차원 행렬에서 인덱싱을 위해 2개의 인자를 [행, 열] 로 구분해서 참조
arr2[2, 1]
- 출력
np.int64(10)
# 마지막 행의 0번째 요소
arr2[-1, 0]
- 출력
np.int64(9)
# 2차원 행렬에서 인덱싱을 위해 2개의 인자를 [행][열] 두 개 사용해서 참조
arr2[2][1]
- 출력
np.int64(10)
# 마지막 행의 0, 2번째 요소
arr2[-1][[0, 2]]
- 출력
array([ 9, 11])
# 1번째 행
arr2[1]
- 출력
array([5, 6, 7, 8])
arr2[1] = np.array([50, 60, 70, 80])
arr2
- 출력
array([[ 1, 2, 3, 4],
[50, 60, 70, 80],
[ 9, 10, 11, 12]])
# 1행 0열 / 2행 2열
arr2[[1, 2], [0, 2]]
- 출력
array([50, 11])
조건식 결과 출력
True / False 를 반환한다.1 > 0
- 출력
True
True / False 를 반환한다.# 10보다 큰 요소
arr2 > 10
- 출력
array([[False, False, False, False],
[ True, True, True, True],
[False, False, True, True]])
배열명[조건] 을 통해 조건식에서 True 를 반환한 위치의 값들을 반환한다.arr2[arr2 > 10]
- 출력
array([50, 60, 70, 80, 11, 12])
boolean 인덱싱boolean 인덱싱을 통해 만들어낸 배열을 통해 원하는 행 또는 열의 값만 추출예시 배열
names = np.array(['Beomwoo','Beomwoo','Kim','Joan','Lee','Beomwoo', 'Park','Beomwoo'])
# np.random.randn(8,4) : 표준정규분포를 하는 난수발생 N(0, 1) (평균은 0, 표준편차 1)
data = np.random.randn(8, 4)
data
- 출력
array([[-0.16702497, 0.24584574, 0.68971859, -0.58364965],
[ 0.44478601, 0.32438835, -0.00510656, 0.66195306],
[ 0.11554351, 0.77763398, -0.44039017, -1.26708853],
[-0.8143724 , 0.54717207, -0.53566061, 1.49591579],
[-0.29348962, -0.27985945, -1.30778708, -2.87336747],
[ 0.0829002 , 0.45329629, -0.16386327, -1.1753417 ],
[ 0.213486 , 0.26226505, -1.45639872, 0.05181792],
[-2.22247099, -3.02353214, -0.2508793 , 0.27356829]])
요소가 Beomwoo 인 항목에 대한 mask 생성
# 요소가 Beomwoo인 항목에 대한 mask 생성
mask = (names == 'Beomwoo')
mask
- 출력
array([ True, True, False, False, False, True, False, True])
Beomwoo 데이터 추출
# Beomwoo 데이터만 가져오기
data[mask]
- 출력
array([[-0.16702497, 0.24584574, 0.68971859, -0.58364965],
[ 0.44478601, 0.32438835, -0.00510656, 0.66195306],
[ 0.0829002 , 0.45329629, -0.16386327, -1.1753417 ],
[-2.22247099, -3.02353214, -0.2508793 , 0.27356829]])
Kim 또는 Park 인 항목에 대한 mask 생성
# Kim 또는 Park의 데이터 가져오기
(names == 'Kim') | (names == 'Park')
- 출력
array([False, False, True, False, False, False, True, False])
Kim 이면서 Park 인 항목에 대한 mask 생성
(names == 'Kim') & (names == 'Park')
- 출력
array([False, False, False, False, False, False, False, False])
예시 배열
arr = np.arange(1, 25).reshape(4, 6)
arr
- 출력
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
[arr[0,0], arr[1,1], arr[2,2], arr[3,3]]
- 출력
[np.int64(1), np.int64(8), np.int64(15), np.int64(22)]
# Fancy Indexing 1
arr[[0, 1, 2, 3], [0, 1, 2, 3]]
- 출력
array([ 1, 8, 15, 22])
# Fancy Indexing 2
arr[1:3, 0:2]
- 출력
array([[ 7, 8],
[13, 14]])