NumPy where 함수의 다중 조건
NumPy에서는 조건 선택을 위해 where() 함수가 흔히 사용됩니다. 여러 조건을 처리할 때는 원하는 결과를 얻기 위해 조건을 효과적으로 결합하는 방법을 이해하는 것이 중요합니다.
지정된 범위 내에서 거리를 선택하려는 예를 생각해 보세요. 다음 코드는 이 작업을 시도합니다.
<code class="python">dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
그러나 두 번째 조건(np.where(dists <= r dr)) 내의 거리만 선택하여 예상치 못한 결과가 발생합니다.
코드 수정
문제를 해결하려면 np.where()가 부울 배열이 아닌 조건을 만족하는 요소의 인덱스를 반환한다는 점을 이해해야 합니다. 따라서 여러 np.where() 호출의 결과를 결합해도 부울 배열이 생성되지 않습니다.
대신 요소별 부울 연산자를 사용하여 원하는 조건부 선택을 수행할 수 있습니다. 이를 구현하는 두 가지 올바른 방법은 다음과 같습니다.
옵션 1: 조건 결합
<code class="python">dists[(dists >= r) & (dists <= r + dr)]
& 연산자는 요소별 AND를 수행하여 부울 배열을 생성합니다. 그런 다음 이를 사용하여 원래 배열 dist를 인덱싱할 수 있습니다.
옵션 2: 중간 변수 사용
<code class="python">mask1 = dists >= r mask2 = dists <= r + dr dists[(mask1) & (mask2)]
각 조건에 대해 임시 변수를 생성하여 확인할 수 있습니다. 두 조건을 모두 사용하고 & 연산자를 사용하여 결합하여 부울 배열을 만듭니다.
원래 코드가 작동하지 않은 이유
np 때문에 원래 코드가 작동하지 않았습니다. .where()는 부울 배열이 아닌 인덱스 목록을 반환합니다. 두 개의 인덱스 목록을 결합해도 원하는 결과가 나오지 않습니다.
예:
<code class="python">dists = np.arange(0, 10, 0.5) r = 5 dr = 1 mask1 = np.where(dists >= r) mask2 = np.where(dists <= r + dr) print(mask1 and mask2) # Outputs: (array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),)</code>
보시다시피 결과 배열은 어떤 요소가 두 조건을 모두 만족하는지 나타내는 부울 배열이 아닙니다.
위 내용은 NumPy의 where 함수에서 여러 조건을 효과적으로 결합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!