NumPy 配列内の特定の行のインスタンスを効率的に見つける
NumPy 配列を操作するとき、 array には特定の行が含まれていますが、ndarray の標準の contains メソッドには疑問が生じます。この記事では、この問題に対する効率的で Python 的な解決策を紹介します。
1 つのアプローチには、.tolist() を使用して NumPy 配列を Python リストに変換し、リストのメンバーシップ チェックを実行することが含まれます。
a = np.array([[1,2],[10,20],[100,200]]) [1,2] in a.tolist() # Returns True [1,20] in a.tolist() # Returns False
もう 1 つの方法は、配列のビューを使用し、.all(1) 関数を適用して各行をターゲット行と要素ごとに比較することです。 .
any((a[:]==[1,2]).all(1)) # Returns True any((a[:]==[1,20]).all(1)) # Returns False
さらに、潜在的なパフォーマンス向上のために NumPy リストを生成することもできます。ただし、結果が早期に見つからない場合、このアプローチは非効率的になる可能性があります。
any(([1,2] == x).all() for x in a) # Stops on first occurrence
最後に、NumPy の論理関数は、比較を実行するための簡潔な方法を提供します。
any(np.equal(a,[1,2]).all(1)) # Returns True
ベンチマーク結果は、numpy ルーチンが、ヒットまたはミスのシナリオに関係なく、一貫した検索速度を維持することを示しています。ビュー、論理的等値、演算子内の Python のアプローチは、効率の点では同等ですが、NumPy を使用するジェネレーターは完全な配列検索には推奨されません。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3