NumPy 配列内の複数の最大値のインデックスの取得
NumPy は、配列内の最大値のインデックスを取得するための便利な np.argmax 関数を提供します。配列。しかし、上位 N 個の最大値のインデックスを見つける必要がある場合はどうすればよいでしょうか?
解決策
最近の NumPy バージョン (1.8 以降) では、このための argpartition 関数が導入されています。目的。上位 N 個の要素のインデックスを取得するには、次の手順に従います。
import numpy as np # Original array a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0]) # Find indices of top N elements (N = 4 in this case) ind = np.argpartition(a, -4)[-4:] # Extract top N elements top4 = a[ind] # Print indices and top N elements print("Indices:", ind) print("Top 4 elements:", top4)
説明
np.argpartition は配列を部分的にソートし、2 つのサブパーティションに分割します。配列: 最初のサブ配列には上位 N 個の要素 (この場合は最大の 4 個の要素) が含まれ、2 番目のサブ配列には残りの要素が含まれます。要素。返された配列 ind には、最初のサブ配列の要素のインデックスが含まれます。
この例の出力は次のようになります。
Indices: [1 5 8 0] Top 4 elements: [4 9 6 9]
Optimizations
ソートされたインデックスも必要な場合は、それらをソートできます個別に:
sorted_ind = ind[np.argsort(a[ind])]
このステップには O(k log k) 時間がかかります。ここで、k は取得する上位要素の数です。全体として、このアプローチの時間計算量は O(n k log k) であり、大規模な配列や中程度の値の k に対して効率的です。
以上がNumPy 配列内の複数の最大値のインデックスを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。