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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 18:44:11463ブラウズ

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

NumPy 配列内の複数の値の行インデックスを見つける方法?

NumPy は、NumPy 配列内の指定された値の行インデックスを見つけるためのいくつかの方法を提供します。

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

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

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

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

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:

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

および dims = [10, 7] の場合、最初の行はX (4, 2) の値は線形インデックス 30 に変換されます。これは、グリッド:

dims = X.max(0) + 1 # [10, 7]
np.ravel_multi_index(X.T, dims) # [30, 66]

一意の線形インデックスのディメンションの選択

一意の線形インデックスを確保するには、グリッドのディメンションを、グリッドの各軸の最大ストレッチに設定する必要があります。入力配列 X。これは、X の各列の最大値に 1 を加算することで実現できます。

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

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