벡터 화 함수를 사용하여 배열을 정당화하는 효율적인 방법을 제공하며 전통적인 Python 루프와 비교하여 인상적인 성능 및 코드 단순성을 제공합니다. 모양을 유지하는 동안 왼쪽, 오른쪽, 위 또는 아래로 0이 아닌 요소가 아닌 요소.
다음 Numpy 구현은 효율적인 정당화를 수행합니다. def respitify (a, invalid_val = 0, axis = 1, side = 'left') : invalid_val이 np.nan 인 경우 : 마스크 = ~ np.isnan (a) 또 다른: 마스크 = a! = invalid_val restified_mask = np.sort (마스크, 축 = 축) if (side == 'up') | (side == '왼쪽') : restified_mask = np.flip (restified_mask, axis = axis) out = np.full (a.shape, invalid_val) Axis == 1 인 경우 : out [restified_mask] = a [마스크] 또 다른: out.t [respitified_mask.t] = a.t [mask.t]
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이 아닌 요소를 식별하고, 정렬을 사용하여 정렬하고, 위 또는 왼쪽을 정당화하는 경우 마스크를 뒤집고, 정당한 값으로 원래 배열을 덮어 쓰는 것입니다.
예제 사용
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]]
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 outn 차원 배열을 정당화 할 수 있습니다. 다음 함수를 사용할 수 있습니다. pushax = lambda a : np.moveaxis (a, 축, -1) invalid_val이 np.nan 인 경우 : 마스크 = ~ np.isnan (a) 또 다른: 마스크 = a! = invalid_val restified_mask = np.sort (마스크, 축 = 축) 측면 == '전면': restified_mask = np.flip (restified_mask, axis = axis) out = np.full (a.shape, invalid_val) if (axis == -1) 또는 (Axis == A.ndim-1) : out [restified_mask] = a [마스크] 또 다른: pushax (out) [pushax (restified_mask)] = pushax (a) [pushax (마스크)] 반환
이 함수는 임의의 축을 따라 N- 차원 배열을 정당화하고 배열의 '전면'또는 '끝'을 정당화하여 더 복잡한 시나리오를 지원합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3