「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Numpyのベクトル化された関数は、どのようにしてアレイを効率的に正当化できますか?

Numpyのベクトル化された関数は、どのようにしてアレイを効率的に正当化できますか?

2025-03-25に投稿されました
ブラウズ:452

How Can NumPy's Vectorized Functions Efficiently Justify Arrays?

を正当化するベクトル化された関数

を正当化するnumpyは、ベクトル化された関数を使用してアレイを正当化するための効率的な方法を提供し、従来のPythonループと比較した改善されたパフォーマンスとコードのシンプルさを提供します。その形状を維持しながら左、右、上、または下に。 def justify(a、nivalid_val = 0、axis = 1、side = 'left'): Invalid_valがnp.nanの場合: mask = 〜np.isnan(a) それ以外: 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) axis == 1の場合: out [justified_mask] = a [マスク] それ以外: out.t [justified_mask.t] = a.t [mask.t]

を返すこの関数は、指定された軸と側面に沿って2D配列を正当化します(左、右、上、下)。マスクを使用してゼロ以外の要素を識別し、ソートを使用して並べ替え、マスクを上向きまたは左に正当化する場合はマスクをひっくり返し、最終的に正当な値を元の配列を上書きすることで機能します。 [3,0,4,0]、 [5,0,6,0]、 [0,7,0,8]]) #左をカバーします coved_left = justify(a、axis = 1、side = 'left') print( "元の配列:") 印刷(a) print( "\ ncovered left:") print(coved_left)

output:

original array: [[1 0 2 0] [3 0 4 0] [5 0 6 0] [0 7 0 8]] 屋根付き左: [[1 2 0 0] [3 4 0 0] [5 6 0 0] [7 8 0 0]]

n-dimensionalアレイを正当化するための汎用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次元配列を正当化し、配列の「フロント」または「終了」のいずれかを正当化することにより、より複雑なシナリオをサポートします。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3