>백엔드 개발 >파이썬 튜토리얼 >(N-1)차원 배열을 사용하여 N차원 배열에 효율적으로 액세스하는 방법은 무엇입니까?

(N-1)차원 배열을 사용하여 N차원 배열에 효율적으로 액세스하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-21 11:57:03239검색

How to Access N-Dimensional Array with (N-1)-Dimensional Array Efficiently?

(N-1)차원 배열을 사용하여 N차원 배열에 액세스

N차원 배열 a와 (N- 1) 차원 배열 idx에서 일반적인 작업은 idx의 인덱스로 지정된 요소에 액세스하는 것입니다. 이는 최대값 찾기 또는 특정 값 검색과 같은 작업을 수행하는 데 유용할 수 있습니다.

고급 인덱싱을 사용한 우아한 솔루션

NumPy의 ogrid 기능과 함께 고급 인덱싱을 사용하는 우아한 솔루션이 있습니다. :

<code class="python">m, n = a.shape[1:]
I, J = np.ogrid[:m, :n]
a_max_values = a[idx, I, J]
b_max_values = b[idx, I, J]</code>

이것은 인덱스의 메쉬 그리드를 생성하고 이를 사용하여 a와 b에 대한 인덱스를 생성하고 해당 값을 포함하는 배열이 생성됩니다.

함수가 포함된 일반적인 경우

지정된 축에 대해 작동하는 보다 일반적인 솔루션을 위해 함수를 정의할 수 있습니다.

<code class="python">def argmax_to_max(arr, argmax, axis):
    new_shape = list(arr.shape)
    del new_shape[axis]

    grid = np.ogrid[tuple(map(slice, new_shape))]
    grid.insert(axis, argmax)

    return arr[tuple(grid)]</code>

이 함수는 배열, 지정된 축을 따른 argmax 및 축 자체를 사용합니다. . 그런 다음 메시그리드를 구성하고 이를 사용하여 해당 요소를 추출합니다.

사용자 정의 기능을 사용한 단순화된 인덱싱

인덱싱 프로세스를 더욱 단순화하기 위해 도우미 함수를 생성할 수 있습니다. 인덱스 그리드를 생성하는 함수:

<code class="python">def all_idx(idx, axis):
    grid = np.ogrid[tuple(map(slice, idx.shape))]
    grid.insert(axis, idx)
    return tuple(grid)</code>

이 함수는 입력 배열의 인덱스를 지정하는 데 직접 사용할 수 있는 인덱스 튜플을 반환합니다.

<code class="python">axis = 0
a_max_values = a[all_idx(idx, axis=axis)]
b_max_values = b[all_idx(idx, axis=axis)]</code>

위 내용은 (N-1)차원 배열을 사용하여 N차원 배열에 효율적으로 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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