ホームページ >バックエンド開発 >Python チュートリアル >NumPy ベクトル化関数はどのようにして NumPy 配列を複数の方向に効率的に位置合わせできるのでしょうか?

NumPy ベクトル化関数はどのようにして NumPy 配列を複数の方向に効率的に位置合わせできるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 14:49:17752ブラウズ

How Can a NumPy Vectorized Function Efficiently Justify a NumPy Array in Multiple Directions?

一般化ベクトル化関数を使用した NumPy 配列の位置調整

はじめに

NumPy 配列の位置調整とは次のことを指しますゼロ以外の要素を配列の片側にシフトして、操作や操作を容易にします。 プロセス。提供されている Python 関数は 2D 行列の左揃えに重点を置いていますが、より効率的かつ包括的なアプローチは、NumPy ベクトル化関数を使用することです。

配列の両端揃え用の NumPy ベクトル化関数

次の関数 justify は、2D 配列を上下だけでなく左右にも位置揃えする一般的な方法を提供します。方向:

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

パラメータ:

  • a: 両端揃えされる入力 NumPy 配列。
  • invalid_val: (オプション)両端揃え配列に入力する値が無効です。デフォルトは 0 です。
  • axis: 位置揃えが実行される軸。行の場合は 1、列の場合は 0。
  • side: 位置揃えの方向。 'left'、'right'、'up'、または 'down'。

使用例:

  • 左位置揃え:
a = np.array([[1, 0, 2, 0],
               [3, 0, 4, 0],
               [5, 0, 6, 0],
               [0, 7, 0, 8]])

justified_array = justify(a, side='left')

print(justified_array)
# Output:
# [[1, 2, 0, 0],
#  [3, 4, 0, 0],
#  [5, 6, 0, 0],
#  [7, 8, 0, 0]]
  • 上位置揃え:
justified_array = justify(a, axis=0, side='up')

print(justified_array)
# Output:
# [[1, 7, 2, 8],
#  [3, 0, 4, 0],
#  [5, 0, 6, 0],
#  [6, 0, 0, 0]]

NumPy の利点関数:

  • ベクトル化: 高パフォーマンスのために NumPy のベクトル化された演算を利用します。
  • 一般化: 4 方向すべての位置揃えをサポートします。 .
  • と互換性があります任意の配列形状: 任意の次元の配列を両端揃えします。
  • カスタマイズ可能な無効な値: 無効な位置の塗りつぶし値を指定できます。
  • Null 値を組み込みます処理: NaN 値を自動的にマスクアウトします (invalid_val が に設定されている場合) NaN).

結論

提供されている NumPy 関数 justify は、NumPy 配列を正当化する堅牢かつ効率的な方法を提供します。その一般化された性質とベクトル化された実装により、配列操作およびタスク処理のための多用途ツールになります。

以上がNumPy ベクトル化関数はどのようにして NumPy 配列を複数の方向に効率的に位置合わせできるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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