>  기사  >  백엔드 개발  >  Numpy 배열에 특정 행이 포함되어 있는지 확인하는 방법은 무엇입니까?

Numpy 배열에 특정 행이 포함되어 있는지 확인하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-21 18:29:02911검색

How to Determine if a Numpy Array Contains a Specific Row?

Numpy 배열에 특정 행이 포함되어 있는지 확인

Numpy 배열로 작업할 때 특정 행이 존재하는지 확인해야 하는 경우가 있습니다. 배열 내에서. 표준 Python 목록과 달리 Numpy 배열은 이러한 검사를 수행할 때 특수한 접근 방식이 필요한 고유한 뉘앙스를 제공합니다.

Numpy 배열 차이점

Python 배열과 달리 Numpy 배열은 다음과 같은 경우에 다른 동작을 나타냅니다. in 연산자를 사용하여 행 존재 여부 테스트:

<code class="python"># Python Array
a = [[1, 2], [10, 20], [100, 200]]
[1, 2] in a  # True
[1, 20] in a  # False

# Numpy Array
a = np.array([[1, 2], [10, 20], [100, 200]])
np.array([1, 2]) in a  # True
np.array([1, 20]) in a  # True  (Unexpected)</code>

효율적인 방법

Numpy 배열에서 행 존재를 효율적으로 확인하려면 다음 방법을 고려하세요.

  • .tolist() 변환: Numpy 배열을 목록으로 변환한 다음 목록에서 in 연산자를 사용합니다.
<code class="python">[1, 2] in a.tolist()  # True
[1, 20] in a.tolist()  # False</code>
  • Numpy 보기: 배열 보기를 사용하여 행 존재를 빠르게 확인:
<code class="python">any((a[:]==[1,2]).all(1))  # True
any((a[:]==[1,20]).all(1))  # False</code>
  • Numpy에 대한 생성기: 각 행에 대해 생성 배열을 선택하고 대상 행과 비교:
<code class="python">any(([1, 2] == x).all() for x in a)  # Stops on first occurrence</code>
  • Numpy 논리 함수: Numpy 논리 함수를 사용하여 비교 수행:
<code class="python">any(np.equal(a, [1, 2]).all(1))  # True</code>

성능 고려 사항

이러한 방법의 성능은 배열의 크기와 구조에 따라 다릅니다. 다음은 300,000 x 3 배열에 대한 몇 가지 타이밍입니다.

early hit: [9000, 9001, 9002] in 300,000 elements:
    view: 0.01002 seconds
    python list: 0.00305 seconds
    gen over numpy: 0.06470 seconds
    logic equal: 0.00909 seconds

late hit: [899970, 899971, 899972] in 300,000 elements:
    view: 0.00936 seconds
    python list: 0.30604 seconds
    gen over numpy: 6.47660 seconds
    logic equal: 0.00965 seconds

결론

Numpy 배열에서 효율적인 행 존재 확인을 위해 . tolist(), Numpy 뷰 또는 Numpy 논리 함수 메서드. 생성기 방법은 상당한 성능 오버헤드로 인해 피해야 합니다.

위 내용은 Numpy 배열에 특정 행이 포함되어 있는지 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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