ホームページ  >  記事  >  バックエンド開発  >  Numpy 配列に特定の行が含まれているかどうかを確認するにはどうすればよいですか?

Numpy 配列に特定の行が含まれているかどうかを確認するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 18:29:02911ブラウズ

How to Determine if a Numpy Array Contains a Specific Row?

Numpy 配列に特定の行が含まれているかどうかを確認する

Numpy 配列を使用する場合、特定の行が存在するかどうかを確認する必要がある場合があります。配列内で。標準の Python リストとは異なり、Numpy 配列は、そのようなチェックを実行するときに特殊なアプローチを必要とする独自のニュアンスを提供します。

Numpy 配列の違い

Python 配列とは異なり、Numpy 配列は、次の場合に異なる動作を示します。 in 演算子を使用した行の存在のテスト:

<code class="python"># Python Array
a = [[1, 2], [10, 20], [100, 200]]
[1, 2] in a  # True
[1, 20] in a  # False

# Numpy Array
a = np.array([[1, 2], [10, 20], [100, 200]])
np.array([1, 2]) in a  # True
np.array([1, 20]) in a  # True  (Unexpected)</code>

効率的な方法

Numpy 配列内の行の存在を効率的にチェックするには、次の方法を検討してください。

  • .tolist() 変換: Numpy 配列をリストに変換し、リストで in 演算子を使用します:
<code class="python">[1, 2] in a.tolist()  # True
[1, 20] in a.tolist()  # False</code>
  • Numpy View: 配列のビューを使用して行の存在を素早く確認します:
<code class="python">any((a[:]==[1,2]).all(1))  # True
any((a[:]==[1,20]).all(1))  # False</code>
  • Numpy に対するジェネレーター: 各行に対して生成配列の値を取得し、ターゲット行と比較します:
<code class="python">any(([1, 2] == x).all() for x in a)  # Stops on first occurrence</code>
  • Numpy 論理関数: Numpy 論理関数を使用して比較を実行します:
<code class="python">any(np.equal(a, [1, 2]).all(1))  # True</code>

パフォーマンスに関する考慮事項

これらのメソッドのパフォーマンスは、配列のサイズと構造によって異なります。 300,000 x 3 配列のタイミングをいくつか示します。

early hit: [9000, 9001, 9002] in 300,000 elements:
    view: 0.01002 seconds
    python list: 0.00305 seconds
    gen over numpy: 0.06470 seconds
    logic equal: 0.00909 seconds

late hit: [899970, 899971, 899972] in 300,000 elements:
    view: 0.00936 seconds
    python list: 0.30604 seconds
    gen over numpy: 6.47660 seconds
    logic equal: 0.00965 seconds

結論

Numpy 配列で行の存在を効率的にチェックするには、 のいずれかを使用することをお勧めします。 tolist()、Numpy ビュー、または Numpy 論理関数メソッド。ジェネレーター メソッドはパフォーマンスのオーバーヘッドが大きいため、使用しないでください。

以上がNumpy 配列に特定の行が含まれているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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