다른 배열의 인덱스를 사용하여 2D 배열에서 요소 추출
NumPy에서는 때때로 다차원 배열에서 특정 요소를 추출해야 하는 경우가 있습니다. 다른 배열에 저장된 인덱스를 기반으로 합니다. 이 시나리오는 희소 행렬이나 인덱스 선택과 같은 데이터 구조로 작업할 때 자주 발생합니다.
문제:
두 개의 NumPy 배열을 고려하세요.
A = np.array([[0, 1], [2, 3], [4, 5]]) B = np.array([[1], [0], [1]]) # Index array
목표는 A의 각 행에서 하나의 요소를 추출하는 것입니다. 여기서 특정 요소는 인덱스로 지정됩니다. B의 해당 행. 예상되는 출력은 다음과 같아야 합니다.
C = np.array([[1], [2], [5]])
해결책:
1. 순수 정수 배열 인덱싱:
A[np.arange(A.shape[0]), B.ravel()]
이 방법에는 NumPy의 정수 배열 인덱싱 기능을 사용하는 방법이 포함됩니다. A의 행에 해당하는 일련의 인덱스를 생성하고 이를 평면화된 B 배열과 결합하여 적절한 요소를 선택합니다.
2. 전치 및 np.choose:
np.choose(B.ravel(), A.T)
이 대체 접근 방식에서는 A를 B의 모양과 일치하도록 전치한 다음 np.choose를 사용하여 평면화된 B 배열을 기반으로 원하는 요소를 선택합니다.
3. 반복 가능한 압축 풀기(Python >=3.6):
*A = A.T C = np.array([*zip(*A)][i] for i in B.ravel())
이 방법은 반복 가능한 압축 풀기를 사용하여 A를 행 목록으로 변환한 다음 B의 인덱스를 기반으로 A의 행을 반복하여 원하는 요소를 추출합니다.
4. 리스트 컴프리헨션 및 브로드캐스팅:
[A[i][j] for i, j in zip(range(A.shape[0]), B.ravel())]
리스트 컴프리헨션은 A와 B의 요소를 반복하고 요소별 선택을 수행하여 새 배열을 생성하는 데 사용할 수 있습니다.
5. 팬시 인덱싱(NumPy >=1.18):
A[np.stack([range(A.shape[0]), B.ravel()], axis=1)]
팬시 인덱싱을 사용하면 보다 효율적이고 컴팩트한 인덱싱 작업이 가능합니다. 이 경우 A에서 원하는 요소를 선택하는 데 사용할 수 있는 행 인덱스와 B 인덱스를 사용하여 2D 배열을 생성합니다.
가장 적합한 솔루션은 작업의 특정 요구 사항과 제약 조건에 따라 다릅니다. 효율성, 가독성, 이전 버전 NumPy와의 호환성 등이 있습니다.
위 내용은 다른 배열의 인덱스를 사용하여 2D NumPy 배열에서 요소를 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!