>  기사  >  백엔드 개발  >  고급 Numpy 인덱싱을 사용하여 매트릭스 행을 효율적으로 롤링하는 방법은 무엇입니까?

고급 Numpy 인덱싱을 사용하여 매트릭스 행을 효율적으로 롤링하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-21 13:40:03382검색

How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?

Numpy 고급 인덱싱을 사용한 효율적인 행렬 행 롤링

문제 설명:

행렬과 롤 값의 배열이 제공됨 , 작업은 해당 롤 값에 따라 독립적으로 행렬의 각 행을 롤링하는 것입니다. 예:

A = np.array([[4, 0, 0],
              [1, 2, 3],
              [0, 0, 5]])

r = np.array([2, 0, -1])

expected_result = np.array([np.roll(row, x) for row,x in zip(A, r)])

# [[0 0 4]
#  [1 2 3]
#  [0 5 0]]

Numpy 고급 인덱싱을 사용하는 솔루션:

행렬 행을 독립적으로 롤링하는 효율적인 접근 방식은 Numpy의 고급 인덱싱 기능을 활용하는 것입니다.

<code class="python">import numpy as np

rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Ensure negative shift to keep column_indices valid
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

result = A[rows, column_indices]</code>

설명:

  • 행렬의 행과 열을 나타내는 np.ogrid를 사용하여 인덱스 그리드를 만듭니다.
  • 롤을 조정합니다. 음수 이동을 보장하여 유효한 열 인덱스를 얻습니다.
  • 열 인덱스 그리드에서 롤 값을 빼고 행을 따라 롤 값을 브로드캐스팅합니다.
  • 고급 인덱싱을 사용하여 롤된 값을 검색합니다. 원본 행렬 A의 요소.

이 접근 방식을 사용하면 명시적인 for 루프를 우회하고 Numpy의 강력한 벡터화 연산을 활용하여 효율적이고 간결한 행 롤링이 가능합니다. 가장 빠른 방법인지 여부는 어레이 크기와 특정 시스템 구성에 따라 다릅니다.

위 내용은 고급 Numpy 인덱싱을 사용하여 매트릭스 행을 효율적으로 롤링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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