>  기사  >  백엔드 개발  >  여러 조건으로 Numpy 배열을 필터링하는 방법: 'np.where()'가 실패하는 이유와 올바른 결과를 얻는 방법은 무엇입니까?

여러 조건으로 Numpy 배열을 필터링하는 방법: 'np.where()'가 실패하는 이유와 올바른 결과를 얻는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-26 10:27:02164검색

 How to Filter Numpy Arrays with Multiple Conditions: Why `np.where()` Fails and How to Achieve Correct Results?

여러 조건을 포함하는 numpy where 함수

numpy에서 where 함수를 사용하면 조건에 따라 배열을 필터링할 수 있습니다. 그러나 & 및 |와 같은 논리 연산자를 사용하여 여러 조건을 적용하려고 하면 예기치 않은 결과가 발생할 수 있습니다.

다음 코드를 고려하세요.

import numpy as np

dists = np.arange(0, 100, 0.5)
r = 50
dr = 10

# Attempt to select distances within a range
result = dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]

이 코드는 r과 r 사이의 거리를 선택하려고 시도합니다. r 박사. 그러나 두 번째 조건인 dists <= r dr을 만족하는 거리만 선택합니다.

실패 이유:

함수가 다음과 같은 요소의 인덱스를 반환하는 numpy 부울 배열이 아닌 조건을 충족합니다. 논리 연산자를 사용하여 여러 where 문을 결합하면 출력은 해당 조건을 충족하는 인덱스 목록입니다. 이러한 목록에 대해 and 연산을 수행하면 두 번째 인덱스 세트가 생성되어 첫 번째 조건이 효과적으로 무시됩니다.

올바른 접근 방식:

  • 요소- 현명한 비교:

여러 조건을 적용하려면 요소별 비교를 직접 사용하세요.

dists[(dists >= r) & (dists <= r + dr)]
  • 부울 배열:

또는 각 조건에 대한 부울 배열을 생성하고 이에 대해 논리 연산을 수행합니다.

condition1 = dists >= r
condition2 = dists <= r + dr
result = dists[condition1 & condition2]
  • 팬시 인덱싱:

팬시 인덱싱은 조건부 필터링도 허용합니다.

result = dists[(condition1) & (condition2)]

어떤 경우에는 다음 예와 같이 조건을 단일 기준으로 단순화하는 것이 유리할 수 있습니다.

result = dists[abs(dists - r - dr/2.) <= dr/2.]

By 프로그래머는 where 함수의 동작을 이해함으로써 numpy의 여러 조건을 기반으로 배열을 효과적으로 필터링할 수 있습니다.

위 내용은 여러 조건으로 Numpy 배열을 필터링하는 방법: 'np.where()'가 실패하는 이유와 올바른 결과를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.