NumPy-고급 인덱싱
튜플이 아닌 시퀀스 인 ndarray, 정수 또는 부울 데이터 유형의 ndarray 개체, 또는 적어도 하나의 항목이 시퀀스 개체 인 튜플에서 선택할 수 있습니다. 고급 인덱싱은 항상 데이터 사본을 반환합니다. 이와 반대로 슬라이싱은보기 만 제공합니다.
고급 인덱싱에는 두 가지 유형이 있습니다. Integer 과 Boolean.
정수 인덱싱
이 메커니즘은 N 차원 인덱스를 기반으로 배열에서 임의의 항목을 선택하는 데 도움이됩니다. 각 정수 배열은 해당 차원의 인덱스 수를 나타냅니다. 인덱스가 대상 ndarray의 차원만큼 많은 정수 배열로 구성되면 간단 해집니다.
다음 예에서는 ndarray 개체의 각 행에서 지정된 열의 한 요소가 선택됩니다. 따라서 행 인덱스에는 모든 행 번호가 포함되고 열 인덱스는 선택할 요소를 지정합니다.
예 1
import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
print y
출력은 다음과 같습니다.
[1 4 5]
선택 항목에는 첫 번째 배열의 (0,0), (1,1) 및 (2,0)에있는 요소가 포함됩니다.
다음 예에서는 4X3 배열의 모서리에 배치 된 요소가 선택됩니다. 선택 행 인덱스는 [0, 0] 및 [3,3]이고 열 인덱스는 [0,2] 및 [0,2]입니다.
예 2
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print 'Our array is:'
print x
print '\n'
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
print 'The corner elements of this array are:'
print y
이 프로그램의 출력은 다음과 같습니다.
Our array is:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
The corner elements of this array are:
[[ 0 2]
[ 9 11]]
결과 선택은 모서리 요소를 포함하는 ndarray 객체입니다.
인덱스 배열과 함께 하나의 슬라이스 (:) 또는 줄임표 (…)를 사용하여 고급 및 기본 인덱싱을 결합 할 수 있습니다. 다음 예에서는 행에 슬라이스를 사용하고 열에 고급 인덱스를 사용합니다. 슬라이스가 둘 다에 사용되는 경우 결과는 동일합니다. 그러나 고급 색인은 복사를 수행하고 다른 메모리 레이아웃을 가질 수 있습니다.
예제 3
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print 'Our array is:'
print x
print '\n'
# slicing
z = x[1:4,1:3]
print 'After slicing, our array becomes:'
print z
print '\n'
# using advanced index for column
y = x[1:4,[1,2]]
print 'Slicing using advanced index for column:'
print y
이 프로그램의 출력은 다음과 같습니다.
Our array is:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
After slicing, our array becomes:
[[ 4 5]
[ 7 8]
[10 11]]
Slicing using advanced index for column:
[[ 4 5]
[ 7 8]
[10 11]]
부울 배열 인덱싱
이러한 유형의 고급 인덱싱은 결과 개체가 비교 연산자와 같은 부울 연산의 결과 인 경우에 사용됩니다.
예 1
이 예에서 5보다 큰 항목은 부울 인덱싱의 결과로 반환됩니다.
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print 'Our array is:'
print x
print '\n'
# Now we will print the items greater than 5
print 'The items greater than 5 are:'
print x[x > 5]
이 프로그램의 출력은 다음과 같습니다.
Our array is:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
The items greater than 5 are:
[ 6 7 8 9 10 11]
예 2
이 예제에서 NaN (Not a Number) 요소는 ~ (보완 연산자)를 사용하여 생략됩니다.
import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print a[~np.isnan(a)]
그 출력은-
[ 1. 2. 3. 4. 5.]
예제 3
다음 예제는 배열에서 복잡하지 않은 요소를 필터링하는 방법을 보여줍니다.
import numpy as np
a = np.array([1, 2+6j, 5, 3.5+5j])
print a[np.iscomplex(a)]
여기에서 출력은 다음과 같습니다.
[2.0+6.j 3.5+5.j]