1. ホーム
  2. python

[解決済み] python numpy.where()はどのように機能するのですか?

2022-12-07 02:39:55

質問

私は numpy で遊んでいて、ドキュメントを調べているうちに、ある魔法に出会いました。つまり、私が話しているのは numpy.where() :

>>> x = np.arange(9.).reshape(3, 3)
>>> np.where( x > 5 )
(array([2, 2, 2]), array([0, 1, 2]))

のようなものを渡すことができるのは、内部的にどのように実現しているのでしょうか? x > 5 のようなものをメソッドに渡すことができるのは、内部的にどのように実現されているのでしょうか?と関係しているのでしょうか? __gt__ と関係があるのでしょうが、詳しい説明を求めています。

どのように解決するのですか?

<ブロッククオート

x > 5 のようなものをメソッドに渡すことができるというのは、内部的にはどのように実現されているのでしょうか?

簡単に言うと、「しない」ということです。

numpyの配列に対するあらゆる種類の論理演算は、boolean配列を返します。(すなわち __gt__ , __lt__ などはすべて、与えられた条件が真である場合のブーリアン配列を返します)。

x = np.arange(9).reshape(3,3)
print x > 5

の収量。

array([[False, False, False],
       [False, False, False],
       [ True,  True,  True]], dtype=bool)

のようなものがあるのも、これと同じ理由です。 if x > 5: が ValueError を発生させるのと同じ理由です。 x がnumpy配列の場合、Value Errorが発生します。 これはTrue/Falseの値の配列であり、単一の値ではありません。

さらに、numpyの配列はboolean配列でインデックスを付けることができます。例 x[x>5][6 7 8] となります。

正直なところ、実際に numpy.where が必要なことはほとんどありませんが、これは単にブーリアン配列が True . 通常は、単純なブーリアンインデックスで必要なことを行うことができます。