본문 바로가기
Programing/Python

Numpy의 boolean 조건으로 index 배열 slicing

by yooom 2023. 10. 3.

두 가지 배열을 생성해서 살펴보자

import numpy as np

arr = np.arange(20).reshape(5,4)

arr

Boolean indexing을 할 때는 Boolean의 원소 개수가 원래 배열의 행(axis = 0) 의 원소 개수와 같아야한다.

지금은 5행 4열의 arr를 만들었으니, 요소 5개짜리 배열을 만들어보자.

axis_ABC = np.array(['A','A','B','C','C'])

axis_ABC

 

numpy에 단항 조건문을 썼을 때, 모든 요소와 연산을 한다.

axis_ABC == 'A'

이제 행렬 arr를 axis_ABC를 이용해 slicing을 해보자.

 

1. 특정 조건을 만족하는 행 선별하기 : ==

arr[axis_ABC == 'A']

axis_ABC의 요소들은 arr의 각 행에 해당하는 결과를 알려준다.

즉, axis_ABC = 'A' 에서 [ T , T , F , F , F ] 였으므로, 2행까지만 반환했다.

 

arr[axis_ABC == 'A', 2]

콤마(,)를 사용해서 특정 조건을 만족하는 행 중에서 원하는 열만 뽑아낼 수도 있고,

 

arr[axis_ABC == 'A', : 2]

클론(:)을 사용해서 원하는 열을 슬라이싱할 수도 있다.

 

2. 특정 조건을 만족하지 않는 행 선별하기 : !=, ~(==)

arr[axis_ABC != 'A']

arr[~(axis_ABC=='A')]

열의 슬라이싱은 이전과 동일하다.

 

3. 여러 조건으로 만족하는 행 선별하기 : &, |

arr[(axis_ABC == 'A') | (axis_ABC == 'B')]

arr[(axis_ABC != 'A') & (axis_ABC != 'B')]

참고로, 여기서 &와 | 대신 and 나 or를 작성하면 ValueError가 뜬다.

4. 조건에 해당하는 배열에 값 대입하기

arr[axis_ABC == 'A', : 2] = 100
arr

728x90

'Programing > Python' 카테고리의 다른 글

Hungaian algorithm  (0) 2023.11.10
행열 transpose - ( zip응용 )  (0) 2023.10.07
클래스 상속, super().__init__() -> 오버로딩  (0) 2023.09.25

댓글