1. ホーム
  2. python

[解決済み] numpy.argwhereを使って、np.arrayの中のマッチする値を取得します。

2022-02-05 20:46:19

質問

を使いたいのですが。 np.argwhere() の値を取得するために np.array .

例えば

z = np.arange(9).reshape(3,3)

[[0 1 2]
 [3 4 5]
 [6 7 8]]

zi = np.argwhere(z % 3 == 0)

[[0 0]
 [1 0]
 [2 0]]

この配列が欲しい。 [0, 3, 6] で、こうしました。

t = [z[tuple(i)] for i in zi] # -> [0, 3, 6]

もっと簡単な方法があると思うのですが。

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

ここでは単純にマスキングを使用してはいかがでしょうか。

z[z % 3 == 0]

サンプルの行列に対して、このように生成されます。

>>> z[z % 3 == 0]
array([0, 3, 6])

同じ次元の行列にブーリアン値を添字として渡すと、その行列の要素を持つ配列が得られ、ここでブーリアン行列は True .

リスト内包がPythonインタプリタレベルで動作するのに対して)numpyレベルでフィルタリングを行うので、さらに効率的に動作します。