두 가지 배열을 생성해서 살펴보자
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 |
댓글