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 중국어 웹사이트의 기타 관련 기사를 참조하세요!