>백엔드 개발 >파이썬 튜토리얼 >NumPy 배열에서 여러 값의 행 인덱스를 찾는 방법은 무엇입니까?

NumPy 배열에서 여러 값의 행 인덱스를 찾는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-07 06:16:13188검색

How to Find Row Indices of Multiple Values in a NumPy Array?

Numpy 배열에서 여러 값의 행 인덱스 찾기

문제:

우리는 NumPy 배열 X와 searched_values ​​값 세트가 제공됩니다. 목표는 searched_values의 각 값에 해당하는 X의 행 인덱스를 결정하는 것입니다.

예를 들어 다음 입력 배열의 경우:

X = np.array([[4,  2],
              [9,  3],
              [8,  5],
              [3,  3],
              [5,  6]])

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])

원하는 출력은 다음과 같아야 합니다.

[0, 3, 4]

접근 방법 #1: NumPy 브로드캐스트

이 접근 방식은 NumPy 브로드캐스팅을 활용하여 X와 검색된_값의 각 행 간의 요소별 비교를 수행합니다.

np.where((X == searched_values[:, None]).all(-1))[1]

접근 방식 #2: np를 사용한 메모리 효율적인 변환 .in1d

메모리를 절약하기 위해 각각을 변환할 수 있습니다. X 행과 searched_values를 선형 인덱스 등가물로 변환한 다음 교차점에 np.in1d를 적용합니다.

dims = X.max(0) + 1
out = np.where(np.in1d(np.ravel_multi_index(X.T, dims),
                        np.ravel_multi_index(searched_values.T, dims)))[0]

접근 방법 #3: np.searchsorted를 사용한 메모리 효율적인 변환

np.searchsorted를 사용하는 또 다른 메모리 효율적인 접근 방식과 동일한 선형 인덱스 철학 변환:

dims = X.max(0) + 1
X1D = np.ravel_multi_index(X.T, dims)
searched_valuesID = np.ravel_multi_index(searched_values.T, dims)
sidx = X1D.argsort()
out = sidx[np.searchsorted(X1D, searched_valuesID, sorter=sidx)]

np.ravel_multi_index 이해

np.ravel_multi_index는 X의 각 행을 고유한 선형 인덱스로 변환합니다. 이는 n차원 인덱스의 2D 배열과 이러한 인덱스가 매핑될 n차원 그리드의 모양에서 작동합니다.

예를 들어, 이 예에서 X의 각 행은 인덱싱 튜플을 나타냅니다. 치수가 희미한 2D 그리드의 경우. np.ravel_multi_index는 이러한 각 튜플을 고유한 선형 인덱스에 매핑합니다.

위 내용은 NumPy 배열에서 여러 값의 행 인덱스를 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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