Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mencari Indeks Berbilang Nilai Maksimum dengan Cekap dalam Tatasusunan NumPy?

Bagaimanakah Saya Boleh Mencari Indeks Berbilang Nilai Maksimum dengan Cekap dalam Tatasusunan NumPy?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 13:24:15919semak imbas

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

Mendapatkan Indeks Berbilang Nilai Maksimum dalam Tatasusunan NumPy

NumPy menyediakan fungsi np.argmax yang mudah untuk mendapatkan semula indeks nilai maksimum dalam tatasusunan. Walau bagaimanapun, bagaimana jika anda perlu mencari indeks bagi nilai maksimum N teratas?

Penyelesaian

Versi NumPy terkini (1.8 dan ke atas) memperkenalkan fungsi argpartition untuk ini tujuan. Untuk mendapatkan indeks unsur N teratas, ikuti langkah berikut:

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)

Penjelasan

np.argpartition mengisih tatasusunan sebahagiannya, membahagikannya kepada dua sub- tatasusunan: sub-tatasusunan pertama mengandungi elemen N teratas (dalam kes ini, 4 elemen terbesar), dan sub-tatasusunan kedua mengandungi elemen yang tinggal. Ind tatasusunan yang dikembalikan mengandungi indeks unsur dalam subtatasusunan pertama.

Output dalam contoh ini ialah:

Indices: [1 5 8 0]
Top 4 elements: [4 9 6 9]

Pengoptimuman

Jika indeks diisih juga diperlukan, anda boleh mengisihnya secara berasingan:

sorted_ind = ind[np.argsort(a[ind])]

Langkah ini memerlukan Masa O(k log k), dengan k ialah bilangan elemen teratas untuk diambil. Secara keseluruhan, pendekatan ini mempunyai kerumitan masa O(n k log k), menjadikannya cekap untuk tatasusunan besar dan nilai sederhana k.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Indeks Berbilang Nilai Maksimum dengan Cekap dalam Tatasusunan NumPy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn