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 サイトの他の関連記事を参照してください。