"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Numpy의 벡터화 된 기능은 어떻게 배열을 효율적으로 정당화 할 수 있습니까?

Numpy의 벡터화 된 기능은 어떻게 배열을 효율적으로 정당화 할 수 있습니까?

2025-03-25에 게시되었습니다
검색:791

How Can NumPy's Vectorized Functions Efficiently Justify Arrays?

벡터 기능을 가진 Numpy 배열을 정당화하는 것은 벡터화 된 기능

벡터 화 함수를 사용하여 배열을 정당화하는 효율적인 방법을 제공하며 전통적인 Python 루프와 비교하여 인상적인 성능 및 코드 단순성을 제공합니다. 모양을 유지하는 동안 왼쪽, 오른쪽, 위 또는 아래로 0이 아닌 요소가 아닌 요소.

Numpy 솔루션

다음 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]]

일반적인 n- 차원 배열에 대한 정당화

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
n 차원 배열을 정당화 할 수 있습니다. 다음 함수를 사용할 수 있습니다. 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