Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Kedudukan Item Tatasusunan dalam Python/NumPy Dengan Cekap Tanpa Isih Berganda?

Bagaimana untuk Kedudukan Item Tatasusunan dalam Python/NumPy Dengan Cekap Tanpa Isih Berganda?

Susan Sarandon
Susan Sarandonasal
2024-10-28 21:29:30824semak imbas

How to Rank Array Items in Python/NumPy Efficiently Without Double Sorting?

Kedudukan Item Tatasusunan yang Lebih Pantas dalam Python/NumPy tanpa Isih Berganda

Dalam analisis data dan pembelajaran mesin, selalunya perlu untuk meletakkan kedudukan item dalam tatasusunan berdasarkan nilai mereka. Mengisih dua kali tatasusunan untuk pemeringkatan boleh memakan masa.

Pendekatan Awal

Kaedah biasa ditunjukkan di bawah:

<code class="python">import numpy as np

# Sample array
array = np.array([4, 2, 7, 1])

# Temporary array for sorting
temp = array.argsort()

# Rank computation
ranks = np.arange(len(array))[temp.argsort()]</code>

Pendekatan ini melibatkan dua operasi pengisihan, meningkatkan kerumitannya.

Penyelesaian Dioptimumkan

Untuk mengelakkan pengisihan berganda, kita boleh memanfaatkan fungsi argsort() NumPy dua kali:

<code class="python">array = np.array([4, 2, 7, 1])

# First argsort to obtain element order
order = array.argsort()

# Second argsort to obtain ranking
ranks = order.argsort()</code>

Penjelasan

Pertama, kami menggunakan argsort() untuk mendapatkan susunan elemen tatasusunan. Kemudian, kami menggunakan argsort() sekali lagi pada susunan yang terhasil, yang memberikan kami kedudukan.

Kesimpulan

Teknik yang dioptimumkan ini meningkatkan dengan ketara kelajuan ranking item tatasusunan dengan mengelakkan pengisihan yang tidak perlu. Untuk tatasusunan berdimensi tinggi, gunakan argumen paksi dalam argsort untuk menentukan paksi untuk mengisih.

Atas ialah kandungan terperinci Bagaimana untuk Kedudukan Item Tatasusunan dalam Python/NumPy Dengan Cekap Tanpa Isih Berganda?. 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