본문 바로가기

파이썬/numpy

Numpy 7. 팬시 색인

정수 배열을 색인처럼 사용하는 것을 팬시 색인(fancy indexing)이라 한다.

 

arr_fancy = np.zeros((8, 4))

for i in range(8):
	arr_fancy[i] = i

8 * 4의 0으로 초기화된 배열을 생성한 뒤, 각 1차원 배열의 원소를 0~7로 초기화해보자.

이런 배열이 될 것이다.

 

특정 순서의 row들을 선택하고 싶다면, 순서대로 array에 인덱스를 담아서 사용할 수 있다.

 

python이 그런 것처럼, 음수 인덱스는 뒤부터 배열을 탐색한다.

 

팬시 인덱싱을 다차원 배열로 하게 되면 결과가 조금 다르게 나온다.

 

arr_fancy = np.arange(32).reshape((8, 4))

arange 함수로 0~31의 길이 32의 1차원 배열이 생성된다.

reshape 함수는 배열의 형태를 임의로 변경할 수 있는 함수이다. reshape의 인자로 (8, 4)가 들어갔으니 길이 32의 1차원 배열은 8 * 4의 2차원 배열로 변경될 것이다.

 

 

잠깐, 위의 배열은 32 = 8*4 라는 조건이 만족했기 때문에 배열이 문제 없이 reshape 되었는데, 만약 조건을 충족하지 못하는 모양으로 변경하려고 하면 어떻게 될까?

 

변경할 수 없다며 ValueError를 뱉어낸다. reshape 인자로 주어지는 모양은 이전 배열의 형태에서 변경할 수 있는 모양이어야 한다.

 

다시 돌아와서, 2차원 배열인 arr_fancy에서 2차원 배열로 팬시 인덱싱을 해보자.

arr_fancy[[7, 5, 2, 3], [3, 2, 0, 1]]

의외의 값들이 선택되었다.

이 결과는 arr_fancy 배열의 (7, 3), (5, 2), (2, 0), (3, 1) 인덱스에 해당하는 원소들의 1차원 배열 형태이다. 다차원 배열의 경우 차수와 관계없이 팬시 인덱싱은 이런 형태의 1차원 배열을 결과로 반환한다.

 

 

'파이썬 > numpy' 카테고리의 다른 글

Numpy 6. Boolean 2, Numpy 조건 연산자  (0) 2020.10.28
Numpy 5. boolean  (0) 2020.10.26
Numpy 4. 인덱싱, 슬라이싱  (0) 2020.10.26
Numpy 3. Numpy 배열의 산술연산  (0) 2020.10.23
numpy 2. ndarray  (0) 2020.10.23