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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 13:24:15904ブラウズ

How Can I Efficiently Find the Indices of Multiple Maximum Values in a NumPy Array?

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

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