Saya terkejut pertanyaan khusus ini belum pernah ditanyakan sebelumnya, tetapi saya benar-benar tidak menemukannya di SO atau di dokumentasi np.sort
.
Katakanlah saya memiliki bilangan bulat numpy array acak, misalnya:
> temp = np.random.randint(1,10, 10)
> temp
array([2, 4, 7, 4, 2, 2, 7, 6, 4, 4])
Jika saya mengurutkannya, saya mendapatkan urutan naik secara default:
> np.sort(temp)
array([2, 2, 2, 4, 4, 4, 4, 6, 7, 7])
tetapi saya ingin solusinya diurutkan dalam urutan menurun .
Sekarang, saya tahu saya selalu bisa melakukan:
reverse_order = np.sort(temp)[::-1]
tetapi apakah pernyataan terakhir ini efisien ? Bukankah itu membuat salinan dalam urutan naik, dan kemudian membalik salinan ini untuk mendapatkan hasil dalam urutan terbalik? Jika memang demikian, apakah ada alternatif yang efisien? Ini tidak terlihat seperti np.sort
menerima parameter untuk mengubah tanda perbandingan dalam operasi pengurutan untuk mendapatkan segala sesuatunya dalam urutan terbalik.
temp[::-1].sort()
mengetahui bahwa ia harus mengurutkan dalam urutan terbalik ?? Cara saya membacanya adalah: membalikkan larik aslinya, lalu mengurutkannya (dalam urutan menaik). Mengapa membalikkan larik asli (datang dalam urutan acak) dan kemudian mengurutkannya dalam urutan menaik mengembalikan larik dalam urutan terbalik?[::-1]
hanya memberi tahu numpy untuk melakukan iterasi ke belakang larik, daripada benar-benar menyusun ulang larik. Jadi saat pengurutan di tempat terjadi, pengurutan sebenarnya dalam urutan menaik dan memindahkan bit, tetapi membiarkan bagian iterasi mundur tidak tersentuh.a=np.array((...))
idioma[::-1]
tidak membalikkan apa pun, itu hanya tampilan baru pada data yang sama, lebih khusus lagi tampilan cermin. Metode inia[::-1].sort()
beroperasi pada gambar yang dicerminkan , menyiratkan bahwa ketikasort
bergerak meninggalkan item yang lebih kecil dalam gambar cerminnya, pada kenyataannya metode ini memindahkannya ke kanan dalam blok memori sebenarnya daria
array. Tampilan cermin diurutkan dalam urutan menaik, data sebenarnya diurutkan dalam urutan menurun. Cobalah sendiri di rumah, dengan beberapa koin dan cermin yang berbeda!np.sort(temp,order='descending')
daripada memerlukan peretasan semacam inisumber
axis
yangnp.sort
telah diterapkan.np.sort(temp)[::-1]
dengan yang menempatkannan
s di bagian belakang array, bukan di depan. Apakah itu baik atau buruk untuk diperdebatkan ..Untuk array pendek saya sarankan menggunakan
np.argsort()
dengan mencari indeks dari array negatif yang diurutkan, yang sedikit lebih cepat daripada membalikkan array yang diurutkan:sumber
a[np.argsort(-a)]
mungkin merupakan pendekatan terbaik untuk orang lain di halaman ini. Tidak ada pembalikan -1 langkah dan satu tanda kurang kurang untuk dipikirkan.Sayangnya bila Anda memiliki array yang kompleks, hanya
np.sort(temp)[::-1]
berfungsi dengan baik. Dua metode lain yang disebutkan di sini tidak efektif.sumber
Hati-hati dengan dimensinya.
Membiarkan
Terbalik Penuh
flip
diubah1.15
, versi sebelumnya diperlukan . Solusi: .1.14
axis
pip install --upgrade numpy
Dimensi Pertama Terbalik
Dimensi Kedua Terbalik
Menguji
Menguji pada array 100 × 10 × 10 1000 kali.
Ini terutama karena pengindeksan ulang, bukan
argsort
.sumber
Halo Saya sedang mencari solusi untuk membalikkan penyortiran array numpy dua dimensi, dan saya tidak dapat menemukan apa pun yang berhasil, tetapi saya pikir saya telah menemukan solusi yang saya unggah untuk berjaga-jaga jika ada orang di kapal yang sama.
np.sort mengurutkan ascending yang bukan yang Anda inginkan, tetapi perintah fliplr membalik baris dari kiri ke kanan! Sepertinya berhasil!
Semoga membantu Anda!
Saya kira ini mirip dengan saran tentang -np.sort (-a) di atas tetapi saya menunda melakukannya dengan komentar bahwa itu tidak selalu berhasil. Mungkin solusi saya tidak selalu berhasil, namun saya telah mengujinya dengan beberapa array dan tampaknya OK.
sumber
Anda bisa mengurutkan array terlebih dahulu (Naik secara default) dan kemudian menerapkan np.flip () ( https://docs.scipy.org/doc/numpy/reference/generated/numpy.flip.html )
FYI Ia bekerja dengan objek datetime juga.
Contoh:
sumber
x = np.array([2,3,np.nan,1,0])
makanp.flip(np.sort(x))
pendekatan menghasilkan [nan 3. 2. 1. 0.], sedangkan-np.sort(-x)
pendekatan menghasilkan [3. 2. 1. 0. nan].Ini trik cepat
sumber
saya sarankan menggunakan ini ...
sebagai contoh:
Kemudian jawaban Anda:
sumber
np.arange(20-0.5, 10-0.5, -0.5)
. Tapi itu cerita yang berbeda dan mungkin, karena keterbacaan yang lebih buruk, bisa diperdebatkan. Array input tidak diurutkan sama sekali