ホームページ >バックエンド開発 >Python チュートリアル >NumPy配列内の複数の値の行インデックスを見つけるにはどうすればよいですか?

NumPy配列内の複数の値の行インデックスを見つけるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 06:16:13199ブラウズ

How to Find Row Indices of Multiple Values in a NumPy Array?

Numpy 配列内の複数の値の行インデックスを見つける

問題:

NumPy 配列 X と値のセット search_values が与えられます。目的は、searched_values の各値に対応する X の行インデックスを決定することです。

たとえば、次の入力配列の場合:

X = np.array([[4,  2],
              [9,  3],
              [8,  5],
              [3,  3],
              [5,  6]])

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])

必要な出力は次のようになります。

[0, 3, 4]

アプローチ #1: NumPyブロードキャスト

このアプローチでは、NumPy ブロードキャストを利用して、X と search_values の各行の間の要素ごとの比較を実行します。

np.where((X == searched_values[:, None]).all(-1))[1]

アプローチ #2: np を使用したメモリ効率の高い変換.in1d

メモリを節約するために、それぞれを変換できますX の行と search_values を線形インデックスに相当し、交差部分に np.in1d を適用します:

dims = X.max(0) + 1
out = np.where(np.in1d(np.ravel_multi_index(X.T, dims),
                        np.ravel_multi_index(searched_values.T, dims)))[0]

アプローチ 3: np.searchsorted を使用したメモリ効率の高い変換

np.searchsorted と同じ線形インデックスの哲学を使用した別のメモリ効率の高いアプローチ変換:

dims = X.max(0) + 1
X1D = np.ravel_multi_index(X.T, dims)
searched_valuesID = np.ravel_multi_index(searched_values.T, dims)
sidx = X1D.argsort()
out = sidx[np.searchsorted(X1D, searched_valuesID, sorter=sidx)]

np.ravel_multi_index について

np.ravel_multi_index は、X の各行を同等の一意の線形インデックスに変換します。これは、n 次元インデックスの 2D 配列と、これらのインデックスがマッピングされる n 次元グリッドの形状を操作します。

たとえば、この例では、X の各行はインデックス タプルを表します。寸法が薄暗い 2D グリッドの場合。 np.ravel_multi_index は、これらの各タプルを一意の線形インデックスにマップします。

以上がNumPy配列内の複数の値の行インデックスを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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