>백엔드 개발 >파이썬 튜토리얼 >NumPy 배열의 0이 아닌 요소를 효율적으로 정당화하려면 어떻게 해야 합니까?

NumPy 배열의 0이 아닌 요소를 효율적으로 정당화하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-08 05:23:11903검색

How Can I Efficiently Justify a NumPy Array's Non-Zero Elements?

0이 아닌 요소를 특정 면에 맞춰 정렬하는 것(종종 검색에 유용함)은 NumPy 배열에 대해 직접 수행할 수 있는 일반적인 작업입니다. 방법은 다음과 같습니다. -

import numpy as np

def justify(a, invalid_val=0, axis=1, side='left'):    
    """
    Justifies a 2D array

    Parameters
    ----------
    A : ndarray
        Input array to be justified
    axis : int
        Axis along which justification is to be made
    side : str
        Direction of justification. It could be 'left', 'right', 'up', 'down'
        It should be 'left' or 'right' for axis=1 and 'up' or 'down' for axis=0.

    """

    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 배열을 정당화할 수 있습니다. -

# sample input array
a = np.array([[1, 0, 2, 0], 
              [3, 0, 4, 0], 
              [5, 0, 6, 0], 
              [0, 7, 0, 8]])

# shift to left
print(justify(a, axis=0, side='up'))
# shift to down
print(justify(a, axis=0, side='down'))
# shift to left
print(justify(a, axis=1, side='left'))
# shift to right
print(justify(a, axis=1, side='right'))

위 내용은 NumPy 배열의 0이 아닌 요소를 효율적으로 정당화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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