>백엔드 개발 >파이썬 튜토리얼 >NumPy 벡터화된 함수는 어떻게 NumPy 배열을 여러 방향으로 효율적으로 정당화할 수 있습니까?

NumPy 벡터화된 함수는 어떻게 NumPy 배열을 여러 방향으로 효율적으로 정당화할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-20 14:49:17755검색

How Can a NumPy Vectorized Function Efficiently Justify a NumPy Array in Multiple Directions?

일반화된 벡터화 함수로 NumPy 배열 정당화

소개

NumPy 배열 정당화는 다음을 의미합니다. 0이 아닌 요소를 배열의 한쪽으로 이동하여 조작하기 쉽게 만듭니다. 또는 프로세스. 제공된 Python 함수는 2D 행렬의 왼쪽 정렬에 중점을 두지만, 더 효율적이고 포괄적인 접근 방식은 NumPy 벡터화 함수를 사용하는 것입니다.

배열 정렬을 위한 NumPy 벡터화 함수

다음 함수 justify는 왼쪽과 오른쪽은 물론 위쪽과 아래쪽 모두에 대해 2D 배열을 정렬하는 일반화된 방법을 제공합니다. 방향:

import numpy as np

def justify(a, invalid_val=0, axis=1, side='left'):    
    if invalid_val is np.nan:
        mask = ~np.isnan(a)
    else:
        mask = a!=invalid_val
    justified_mask = np.sort(mask,axis=axis)
    if (side=='up') | (side=='left'):
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val) 
    if axis==1:
        out[justified_mask] = a[mask]
    else:
        out.T[justified_mask.T] = a.T[mask.T]
    return out

매개변수:

  • a: 정당화할 입력 NumPy 배열.
  • invalid_val: (선택 사항) 정렬된 배열을 채울 값이 잘못되었습니다. 기본값은 0입니다.
  • 축: 정렬이 수행될 축입니다. 행의 경우 1, 열의 경우 0.
  • 측: 정렬 방향입니다. '왼쪽', '오른쪽', '위' 또는 '아래'.

사용 예:

  • 왼쪽 정당화:
a = np.array([[1, 0, 2, 0],
               [3, 0, 4, 0],
               [5, 0, 6, 0],
               [0, 7, 0, 8]])

justified_array = justify(a, side='left')

print(justified_array)
# Output:
# [[1, 2, 0, 0],
#  [3, 4, 0, 0],
#  [5, 6, 0, 0],
#  [7, 8, 0, 0]]
  • 위로 정당화:
justified_array = justify(a, axis=0, side='up')

print(justified_array)
# Output:
# [[1, 7, 2, 8],
#  [3, 0, 4, 0],
#  [5, 0, 6, 0],
#  [6, 0, 0, 0]]

NumPy의 이점 기능:

  • 벡터화: 고성능을 위해 NumPy의 벡터화 작업을 활용합니다.
  • 일반화: 네 방향 모두에 대한 정렬을 지원합니다. .
  • 호환 가능 임의 배열 모양: 모든 차원의 배열을 정렬합니다.
  • 사용자 정의 가능한 잘못된 값: 잘못된 위치에 채우기 값을 지정할 수 있습니다.
  • Null 값을 통합합니다. 처리: NaN 값을 자동으로 마스크합니다(invalid_val이 다음으로 설정된 경우). NaN).

결론

제공된 NumPy 함수인 justify는 NumPy 배열을 정당화하는 강력하고 효율적인 방법을 제공합니다. 일반화된 특성과 벡터화된 구현으로 인해 배열 조작 및 처리 작업을 위한 다목적 도구가 됩니다.

위 내용은 NumPy 벡터화된 함수는 어떻게 NumPy 배열을 여러 방향으로 효율적으로 정당화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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