NumPy는 벡터화된 함수를 사용하여 배열을 정당화하는 효율적인 방법을 제공하여 기존 Python 루프에 비해 향상된 성능과 코드 단순성을 제공합니다.
NumPy 제공 배열의 경우 작업은 모양을 유지하면서 0이 아닌 요소를 왼쪽, 오른쪽, 위 또는 아래로 이동하는 것입니다.
다음 NumPy 구현은 효율적인 정렬을 수행합니다.
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
이 함수는 지정된 축과 측면(왼쪽, 오른쪽, 위, 아래)을 따라 2D 배열을 정렬합니다. 마스크를 사용하여 0이 아닌 요소를 식별하고, 정렬을 사용하여 정렬하고, 위쪽이나 왼쪽으로 정렬하는 경우 마스크를 뒤집고, 마지막으로 양쪽 정렬된 값으로 원래 배열을 덮어쓰는 방식으로 작동합니다.
다음은 0이 아닌 요소를 다루는 사용 예입니다. 왼쪽:
a = np.array([[1,0,2,0], [3,0,4,0], [5,0,6,0], [0,7,0,8]]) # Cover left covered_left = justify(a, axis=1, side='left') print("Original Array:") print(a) print("\nCovered Left:") print(covered_left)
출력:
Original Array: [[1 0 2 0] [3 0 4 0] [5 0 6 0] [0 7 0 8]] Covered Left: [[1 2 0 0] [3 4 0 0] [5 6 0 0] [7 8 0 0]]
N차원 배열 정렬을 위해 다음 함수를 사용할 수 있습니다. :
def justify_nd(a, invalid_val, axis, side): pushax = lambda a: np.moveaxis(a, axis, -1) if invalid_val is np.nan: mask = ~np.isnan(a) else: mask = a!=invalid_val justified_mask = np.sort(mask,axis=axis) if side=='front': justified_mask = np.flip(justified_mask,axis=axis) out = np.full(a.shape, invalid_val) if (axis==-1) or (axis==a.ndim-1): out[justified_mask] = a[mask] else: pushax(out)[pushax(justified_mask)] = pushax(a)[pushax(mask)] return out
이 함수는 임의의 축을 따라 N차원 배열을 정당화하고 배열의 '앞' 또는 '끝'에.
위 내용은 NumPy의 벡터화된 함수는 어떻게 배열을 효율적으로 정당화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!