넘파이에서 ndarray 내의 일부 데이터 세트나 특정 데이터만을 선택할 수 있도록 하는 인덱싱에 대해 알아보자

 

 

1. 특정 데이터만 추출 : 원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터 반환됨

 

array1 = np.arange(10)  # [ 0 1 2 3 4 5 6 7 8 9 ]
print(array1[2])        # 2
print(array1[-1])       # 9

array1[0] = 10
print(array1)           # [ 10 1 2 3 4 5 6 7 8 9 ]

 

- 인덱스값을 [] 괄호 안 인덱스로 접근 할 수 있다. 그리고 파이썬과 같이 - 가 되면 뒷쪽부터 접근하게 된다.

- 특정 인덱스의 값을 변경하고 싶을 시 ndarray[index]  = 값 을 통해 변경 가능

 

 

 

 

2. 슬라이싱(Slicing) : 슬라이싱은 연속된 인덱스상의 ndarray를 추출하는 방식. ':' 기호 사이에 시작 인덱스와 종료 인덱스를 표시하면 시작인덱스에서 종료인덱스-1 위치에 있는 데이터의 ndarray를 반환합니다. 예를 들어 1:5라고 하면 시작 인덱스 1과 종료 인덱스 4까지에 해당하는 ndarray를 반환함

 

array1 = np.arange(start=1, stop=10)  # [1 2 3 4 5 6 7 8 9 ]

print(array1[0:3])
print(array1[:3])

print(array1[3:])
print(array2[:])

 

- start와 stop을 통해서 1 ~ 9까지 값을 가진 ndarray를 가진 array1

- 결과값

 첫번째 print 문 [0:3] -> index: 0 1 2 [1 2 3]
 두번째 print 문 [:3] -> index: 0 1 2 [1 2 3]
 세번째 print 문 [3:] -> index: 3 4 5 6 7 8 [4 5 6 7 8 9]
 네번째 print 문 [:] -> index: 0 1 2 3 4 5 6 7 8 [1 2 3 4 5 6 7 8 9]

* 첫번째와 두번째는 같은 결과를 나타낸다.

* 다음은 2차원 배열에서 접근 방법을 나타낸다

 

 

 

 

3. 팬시 인덱스(Fancy indexing) : 일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치에 있는 데이터의 ndarray를 반환함

 

array1d = np.arange(start=1,stop=10).reshape(3,3)

print(array1d[[0,1],2].tolist())
print(array1d[[0,1],0:2].tolist())
print(array1d[[0,1]].tolist())

- array1d => [[1 2 3] [4 5 6] [7 8 9]]

- 결과값

  [3 6]    => 0행과 1행 + 2열

  [[ 1 2 ] [4 5]]    => 0행과 1행 + 0열 ~ 1열

  [[ 1 2 3 ] [ 4 5 6 ] [ 7 8 9 ]]     => 0행과 1행 + 모든 열

 

 

4. 불린 인덱싱(Boolean indexing) : 특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반을 기반으로 True에 해당하는 인덱스 위치에 있는 데이터의 ndarray를 반화함

 

array1d = np.arange(3)             # 0 1 2
array1d > 1                        # false false true
print(array1d[array1d > 1])        # [2]

- 조건에 만족하는 것을 확인하기 위해 사용하며, ndarray[ndarray에 비교할 조건식]으로 사용

+ Recent posts