반응형
indexing의 방법은 기본적으로 python list와 동일하다.
2차원 이상의 배열에서는 훨씬 편리하게 슬라이싱을 할 수 있다.
arr = np.arange(0, 25).reshape(5, 5)
print("arr:\n",arr)
print("1 :\n", arr[1:4, 1:4])
print("2 :\n", arr[1:3])
print("3 :\n", arr[:, [0]])
print("4 :\n", arr[1])
print("4-1 :\n", arr[1, :])
arr:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
1 :
[[ 6 7 8]
[11 12 13]
[16 17 18]]
2 :
[[ 5 6 7 8 9]
[10 11 12 13 14]]
3 :
[[ 0]
[ 5]
[10]
[15]
[20]]
4 :
[5 6 7 8 9]
4-1 :
[5 6 7 8 9]
fancy indexing
fancy indexing을 이용하면 범위가 아니라 요소별로 인덱싱, 슬라이싱이 가능하다
이를 이용하면 5*5 배열에서 대각선 요소만 가져오는 것도 가능하다.
arr:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
print(arr[[1,3], 3])
[ 8 18]
print(arr[[0,1,2,3,4],[0,1,2,3,4]])
[ 0 6 12 18 24]
arr2 = np.arange(0,12,1).reshape(3,4)
print(arr2)
print(arr2[0:2,[1,3]]) # 행에 대해서는 슬라이싱, 열에 대해서는 fancy indexing.
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[1 3]
[5 7]]
arr2에서 5,7,9,11만 인덱싱하고자 다음과 같이 입력하면 오류가 난다.
이는 넘파이 내부 구조때문인데 np.ix_()를 사용하면 해결할 수 있다.
print(arr2([[0,1], [1,3]]))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [100], in <cell line: 2>()
1 # 5,7,9,11
----> 2 print(arr2([[0,1], [1,3]]))
TypeError: 'numpy.ndarray' object is not callable
npix = np.ix_([0,2],[1,3])
print(arr2[npix])
[[ 1 3]
[ 9 11]]
boolean indexing
indexing 방법 중 하나로 boolean mask를 이용해서 indexing하는 방법이다.
※ boolean mask는 True, False로만 구성된 ndarray를 boolean mask라고 한다
arr = np.arange(0, 25).reshape(5, 5)
print('5의 배수 인덱싱 결과 값 :', arr[arr%5==0])
5의 배수 인덱싱 결과 값 : [ 0 5 10 15 20]
b_mask = arr > 10
print(b_mask)
[[False False False False False]
[False False False False False]
[False True True True True]
[ True True True True True]
[ True True True True True]]
print(arr[b_mask])
[11 12 13 14 15 16 17 18 19 20 21 22 23 24]
boolean indexing을 사용하면 대용량의 데이터를 조건처리할때
for문과 if문을 쓰지 않고 처리할 수 있다.
반응형
'Programming > Numpy' 카테고리의 다른 글
[numpy][pandas] np.histogram()으로 도수분포표 만들기 (0) | 2022.03.23 |
---|---|
[numpy] ndarray의 shape과 관련된 함수들 (0) | 2022.03.15 |
[numpy] ndarray를 생성하는 여러가지 방법 2 - random (0) | 2022.03.15 |
[numpy] ndarray를 생성하는 여러가지 방법 1 (0) | 2022.03.15 |
[numpy] 데이터 핸들링을 위한 넘파이 (0) | 2022.03.15 |