정수 배열을 색인처럼 사용하는 것을 팬시 색인(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 |