ホームページ >バックエンド開発 >Python チュートリアル >NumPy 配列のゼロ以外の要素を効率的に正当化するにはどうすればよいですか?

NumPy 配列のゼロ以外の要素を効率的に正当化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-08 05:23:11917ブラウズ

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

ゼロ以外の要素を特定の側に揃える (検索でよく役立つ) ことは一般的な操作であり、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

上記のスニペットは、選択した軸に沿って 4 つの可能な方向のいずれかに 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 配列のゼロ以外の要素を効率的に正当化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。