Cara Menggunakan Fungsi NumPy argmax() dengan Python

Dalam tutorial ini, Anda akan belajar cara menggunakan fungsi NumPy argmax() untuk menemukan indeks elemen maksimum dalam array.

NumPy adalah perpustakaan yang kuat untuk komputasi ilmiah dengan Python; itu menyediakan array N-dimensi yang lebih berkinerja daripada daftar Python. Salah satu operasi umum yang akan Anda lakukan saat bekerja dengan array NumPy adalah menemukan nilai maksimum dalam array. Namun, terkadang Anda mungkin ingin menemukan indeks di mana nilai maksimum terjadi.

Fungsi argmax() membantu Anda menemukan indeks maksimum dalam array satu dimensi dan multidimensi. Mari kita lanjutkan untuk mempelajari cara kerjanya.

Cara Menemukan Indeks Elemen Maksimum dalam Array NumPy

Untuk mengikuti tutorial ini, Anda harus menginstal Python dan NumPy. Anda dapat membuat kode dengan memulai Python REPL atau meluncurkan notebook Jupyter.

Pertama, mari impor NumPy di ​​bawah alias biasa np.

import numpy as np

Anda dapat menggunakan fungsi NumPy max() untuk mendapatkan nilai maksimum dalam array (opsional di sepanjang sumbu tertentu).

array_1 = np.array([1,5,7,2,10,9,8,4])
print(np.max(array_1))

# Output
10

Dalam hal ini, np.max(array_1) mengembalikan 10, yang benar.

Misalkan Anda ingin menemukan indeks di mana nilai maksimum terjadi dalam array. Anda dapat mengambil pendekatan dua langkah berikut:

  • Temukan elemen maksimum.
  • Temukan indeks elemen maksimum.
  • Dalam array_1, nilai maksimum 10 terjadi pada indeks 4, setelah pengindeksan nol. Elemen pertama berada pada indeks 0; elemen kedua berada pada indeks 1, dan seterusnya.

    Untuk menemukan indeks di mana maksimum terjadi, Anda dapat menggunakan fungsi NumPy where() . np.where(condition) mengembalikan array semua indeks dengan kondisi True.

    Anda harus memasuki array dan mengakses item pada indeks pertama. Untuk menemukan di mana nilai maksimum terjadi, kami menetapkan kondisinya ke array_1==10; ingat bahwa 10 adalah nilai maksimum dalam array_1.

    print(int(np.where(array_1==10)[0]))
    
    # Output
    4

    Kami telah menggunakan np.where() hanya dengan kondisi, tetapi ini bukan metode yang disarankan untuk menggunakan fungsi ini.

    Catatan: NumPy where() Fungsi:
    np.where(kondisi,x,y) mengembalikan:

    – Elemen dari x jika kondisinya Benar, dan
    – Elemen dari y ketika kondisinya Salah.

      Cara Menghentikan Secara Otomatis Membuka ritsleting File Di Safari Di macOS

    Oleh karena itu, dengan merantai fungsi np.max() dan np.where() , kita dapat menemukan elemen maksimum, diikuti oleh indeks tempat elemen tersebut muncul.

    Alih-alih proses dua langkah di atas, Anda dapat menggunakan fungsi NumPy argmax() untuk mendapatkan indeks elemen maksimum dalam array.

    Sintaks Fungsi NumPy argmax()

    Sintaks umum untuk menggunakan fungsi NumPy argmax() adalah sebagai berikut:

    np.argmax(array,axis,out)
    # we've imported numpy under the alias np

    Dalam sintaks di atas:

    • array adalah array NumPy yang valid.
    • sumbu adalah parameter opsional. Saat bekerja dengan array multidimensi, Anda dapat menggunakan parameter sumbu untuk menemukan indeks maksimum di sepanjang sumbu tertentu.
    • out adalah parameter opsional lainnya. Anda dapat mengatur parameter out ke array NumPy untuk menyimpan output dari fungsi argmax().

    Catatan: Dari NumPy versi 1.22.0, ada parameter keepdims tambahan. Saat kita menentukan parameter sumbu dalam pemanggilan fungsi argmax(), array dikurangi sepanjang sumbu itu. Tetapi menyetel parameter keepdims ke True memastikan bahwa output yang dikembalikan memiliki bentuk yang sama dengan array input.

    Menggunakan NumPy argmax() untuk Menemukan Indeks Elemen Maksimum

    #1. Mari kita gunakan fungsi NumPy argmax() untuk menemukan indeks elemen maksimum dalam array_1.

    array_1 = np.array([1,5,7,2,10,9,8,4])
    print(np.argmax(array_1))
    
    # Output
    4

    Fungsi argmax() mengembalikan 4, yang benar!

    #2. Jika kita mendefinisikan ulang array_1 sehingga10 muncul dua kali, fungsi argmax() hanya mengembalikan indeks kemunculan pertama.

    array_1 = np.array([1,5,7,2,10,10,8,4])
    print(np.argmax(array_1))
    
    # Output
    4

    Untuk contoh lainnya, kita akan menggunakan elemen array_1 yang kita definisikan pada contoh #1.

    Menggunakan NumPy argmax() untuk Menemukan Indeks Elemen Maksimum dalam Array 2D

    Mari kita bentuk ulang array NumPy array_1 menjadi array dua dimensi dengan dua baris dan empat kolom.

    array_2 = array_1.reshape(2,4)
    print(array_2)
    
    # Output
    [[ 1  5  7  2]
     [10  9  8  4]]

    Untuk array dua dimensi, sumbu 0 menunjukkan baris dan sumbu 1 menunjukkan kolom. Array NumPy mengikuti pengindeksan nol. Jadi indeks baris dan kolom untuk array NumPy array_2 adalah sebagai berikut:

    Sekarang, panggil fungsi argmax() pada array dua dimensi, array_2.

    print(np.argmax(array_2))
    
    # Output
    4

    Meskipun kita memanggil argmax() pada array dua dimensi, ia masih mengembalikan 4. Ini identik dengan output untuk array satu dimensi, array_1 dari bagian sebelumnya.

    Mengapa ini terjadi?

    Ini karena kami belum menentukan nilai apa pun untuk parameter sumbu. Ketika parameter sumbu ini tidak disetel, secara default, fungsi argmax() mengembalikan indeks elemen maksimum di sepanjang larik yang diratakan.

      Tidak Semua 5G Sama: Gelombang Milimeter, Band Rendah, dan Band Tengah Dijelaskan

    Apa itu array datar? Jika terdapat larik berdimensi-N berbentuk d1 x d2 x … x dN, di mana d1, d2, hingga dN adalah ukuran larik sepanjang dimensi N, maka larik yang diratakan adalah larik satu dimensi yang panjang. d1 * d2 * … * dN.

    Untuk memeriksa tampilan array yang diratakan untuk array_2, Anda dapat memanggil metode flatten(), seperti yang ditunjukkan di bawah ini:

    array_2.flatten()
    
    # Output
    array([ 1,  5,  7,  2, 10,  9,  8,  4])

    Indeks Elemen Maksimum Sepanjang Baris (sumbu = 0)

    Mari kita lanjutkan untuk mencari indeks elemen maksimum di sepanjang baris (sumbu = 0).

    np.argmax(array_2,axis=0)
    
    # Output
    array([1, 1, 1, 1])

    Output ini mungkin agak sulit untuk dipahami, tetapi kami akan memahami cara kerjanya.

    Kami telah menetapkan parameter sumbu ke nol (sumbu = 0), karena kami ingin menemukan indeks elemen maksimum di sepanjang baris. Oleh karena itu, fungsi argmax() mengembalikan nomor baris tempat elemen maksimum muncul—untuk masing-masing dari tiga kolom.

    Mari kita visualisasikan ini untuk pemahaman yang lebih baik.

    Dari diagram di atas dan output argmax(), kami memiliki yang berikut:

    • Untuk kolom pertama pada indeks 0, nilai maksimum 10 terjadi pada baris kedua, pada indeks = 1.
    • Untuk kolom kedua pada indeks 1, nilai maksimum 9 terjadi pada baris kedua, pada indeks = 1.
    • Untuk kolom ketiga dan keempat pada indeks 2 dan 3, nilai maksimum 8 dan 4 keduanya terjadi pada baris kedua, pada indeks = 1.

    Inilah tepatnya mengapa kami memiliki larik keluaran ([1, 1, 1, 1]) karena elemen maksimum di sepanjang baris terjadi di baris kedua (untuk semua kolom).

    Indeks Elemen Maksimum Sepanjang Kolom (sumbu = 1)

    Selanjutnya, mari kita gunakan fungsi argmax() untuk menemukan indeks elemen maksimum di sepanjang kolom.

    Jalankan potongan kode berikut dan amati hasilnya.

    np.argmax(array_2,axis=1)
    array([2, 0])

    Bisakah Anda mengurai outputnya?

    Kami telah menetapkan sumbu = 1 untuk menghitung indeks elemen maksimum di sepanjang kolom.

    Fungsi argmax() mengembalikan, untuk setiap baris, nomor kolom tempat nilai maksimum muncul.

    Berikut penjelasan visualnya:

    Dari diagram di atas dan output argmax(), kami memiliki yang berikut:

    • Untuk baris pertama pada indeks 0, nilai maksimum 7 terjadi pada kolom ketiga, pada indeks = 2.
    • Untuk baris kedua pada indeks 1, nilai maksimum 10 terjadi pada kolom pertama, pada indeks = 0.
      Cara Mengidentifikasi Sidik Jari Touch ID

    Saya harap Anda sekarang mengerti apa outputnya, array([2, 0]) cara.

    Menggunakan Parameter Keluar Opsional di NumPy argmax()

    Anda dapat menggunakan parameter out opsional dalam fungsi NumPy argmax() untuk menyimpan output dalam array NumPy.

    Mari kita inisialisasi array nol untuk menyimpan output dari panggilan fungsi argmax() sebelumnya – untuk menemukan indeks maksimum di sepanjang kolom (sumbu = 1).

    out_arr = np.zeros((2,))
    print(out_arr)
    [0. 0.]

    Sekarang, mari kita lihat kembali contoh pencarian indeks elemen maksimum di sepanjang kolom (sumbu = 1) dan atur ke out_arr yang telah kita definisikan di atas.

    np.argmax(array_2,axis=1,out=out_arr)

    Kita melihat bahwa interpreter Python melempar TypeError, karena out_arr diinisialisasi ke array float secara default.

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    /usr/local/lib/python3.7/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
         56     try:
    ---> 57         return bound(*args, **kwds)
         58     except TypeError:
    
    TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'

    Oleh karena itu, saat menyetel parameter keluar ke larik keluaran, penting untuk memastikan bahwa larik keluaran memiliki bentuk dan tipe data yang benar. Karena indeks array selalu bilangan bulat, kita harus mengatur parameter dtype ke int saat mendefinisikan array output.

    out_arr = np.zeros((2,),dtype=int)
    print(out_arr)
    
    # Output
    [0 0]

    Kita sekarang dapat melanjutkan dan memanggil fungsi argmax() dengan parameter sumbu dan keluar, dan kali ini, itu berjalan tanpa kesalahan.

    np.argmax(array_2,axis=1,out=out_arr)

    Output dari fungsi argmax() sekarang dapat diakses di array out_arr.

    print(out_arr)
    # Output
    [2 0]

    Kesimpulan

    Saya harap tutorial ini membantu Anda memahami cara menggunakan fungsi NumPy argmax(). Anda dapat menjalankan contoh kode di notebook Jupyter.

    Mari kita tinjau kembali apa yang telah kita pelajari.

    • Fungsi NumPy argmax() mengembalikan indeks elemen maksimum dalam array. Jika elemen maksimum muncul lebih dari sekali dalam larik a, maka np.argmax(a) mengembalikan indeks kemunculan elemen pertama.
    • Saat bekerja dengan array multidimensi, Anda dapat menggunakan parameter sumbu opsional untuk mendapatkan indeks elemen maksimum di sepanjang sumbu tertentu. Misalnya, dalam larik dua dimensi: dengan mengatur sumbu = 0 dan sumbu = 1, Anda bisa mendapatkan indeks elemen maksimum di sepanjang baris dan kolom, masing-masing.
    • Jika Anda ingin menyimpan nilai yang dikembalikan dalam larik lain, Anda dapat menyetel parameter keluar opsional ke larik keluaran. Namun, larik keluaran harus memiliki bentuk dan tipe data yang kompatibel.

    Selanjutnya, lihat panduan mendalam tentang set Python.