Како користити функцију НумПи аргмак() у Питхон-у

У овом водичу ћете научити како да користите функцију НумПи аргмак() да пронађете индекс максималног елемента у низовима.

НумПи је моћна библиотека за научно рачунарство у Питхон-у; пружа Н-димензионалне низове који су ефикаснији од Питхон листа. Једна од уобичајених операција које ћете изводити када радите са НумПи низовима је проналажење максималне вредности у низу. Међутим, понекад ћете можда желети да пронађете индекс на коме се јавља максимална вредност.

Функција аргмак() вам помаже да пронађете индекс максимума у ​​једнодимензионалним и вишедимензионалним низовима. Хајде да наставимо да научимо како то функционише.

Како пронаћи индекс максималног елемента у НумПи низу

Да бисте пратили овај водич, потребно је да имате инсталиране Питхон и НумПи. Можете кодирати тако што ћете покренути Питхон РЕПЛ или покренути Јупитер нотебоок.

Прво, хајде да увеземо НумПи под уобичајеним алиасом нп.

import numpy as np

Можете користити функцију НумПи мак() да бисте добили максималну вредност у низу (опционо дуж одређене осе).

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

# Output
10

У овом случају, нп.мак(арраи_1) враћа 10, што је тачно.

Претпоставимо да желите да пронађете индекс на коме се јавља максимална вредност у низу. Можете користити следећи приступ у два корака:

  • Пронађите максимални елемент.
  • Пронађите индекс максималног елемента.
  • У низу_1, максимална вредност од 10 се јавља на индексу 4, након индексирања нуле. Први елемент је на индексу 0; други елемент је на индексу 1, и тако даље.

    Да бисте пронашли индекс на коме се јавља максимум, можете користити функцију НумПи вхере(). нп.вхере(цондитион) враћа низ свих индекса где је услов Тачан.

    Мораћете да додирнете низ и приступите ставци на првом индексу. Да бисмо пронашли где се јавља максимална вредност, поставили смо услов на арраи_1==10; подсетимо да је 10 максимална вредност у низу_1.

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

    Користили смо нп.вхере() само са условом, али ово није препоручени метод за коришћење ове функције.

      Шта је ЦхатГПТ тумач кодова? Зашто је то тако важно?

    📑 Напомена: НумПи вхере() функција:
    нп.вхере(услов,к,и) враћа:

    – Елементи из к када је услов Тачан, и
    – Елементи из и када је услов Нетачно.

    Стога, уланчавањем функција нп.мак() и нп.вхере() можемо пронаћи максимални елемент, праћен индексом на којем се појављује.

    Уместо претходног процеса у два корака, можете користити функцију НумПи аргмак() да бисте добили индекс максималног елемента у низу.

    Синтакса функције НумПи аргмак().

    Општа синтакса за коришћење функције НумПи аргмак() је следећа:

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

    У горњој синтакси:

    • низ је било који важећи НумПи низ.
    • акис је опциони параметар. Када радите са вишедимензионалним низовима, можете користити параметар оси да бисте пронашли индекс максимума дуж одређене осе.
    • оут је још један опциони параметар. Параметар оут можете поставити на НумПи низ за складиштење излаза функције аргмак().

    Напомена: Од НумПи верзије 1.22.0 постоји додатни параметар кеепдимс. Када наведемо параметар оси у позиву функције аргмак(), низ се смањује дуж те осе. Али постављање параметра кеепдимс на Труе осигурава да враћени излаз буде истог облика као и улазни низ.

    Коришћење НумПи аргмак() за проналажење индекса максималног елемента

    #1. Хајде да користимо функцију НумПи аргмак() да пронађемо индекс максималног елемента у низу_1.

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

    Функција аргмак() враћа 4, што је тачно! ✅

    #2. Ако редефинишемо низ_1 тако да се 10 појављује двапут, функција аргмак() враћа само индекс првог појављивања.

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

    За остале примере, користићемо елементе низа_1 које смо дефинисали у примеру #1.

    Коришћење НумПи аргмак() за проналажење индекса максималног елемента у 2Д низу

    Хајде да преобликујемо НумПи низ низ_1 у дводимензионални низ са два реда и четири колоне.

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

    За дводимензионални низ, оса 0 означава редове, а оса 1 означава колоне. НумПи низови прате нулто индексирање. Дакле, индекси редова и колона за НумПи низ арраи_2 су следећи:

    Сада, позовимо функцију аргмак() на дводимензионалном низу, арраи_2.

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

    Иако смо позвали аргмак() за дводимензионални низ, он и даље враћа 4. Ово је идентично излазу за једнодимензионални низ, арраи_1 из претходног одељка.

      Поправка Неуспешно креирање прокси уређаја за УСБ уређај

    Зашто се то дешава? 🤔

    То је зато што нисмо навели ниједну вредност за параметар осовине. Када овај параметар осе није подешен, функција аргмак() подразумевано враћа индекс максималног елемента дуж спљоштеног низа.

    Шта је спљоштени низ? Ако постоји Н-димензионални низ облика д1 к д2 к … к дН, где су д1, д2, до дН величине низа дуж Н димензија, онда је спљоштени низ дугачак једнодимензионални низ величине д1 * д2 * … * дН.

    Да бисте проверили како спљоштени низ изгледа за низ_2, можете позвати метод флаттен(), као што је приказано у наставку:

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

    Индекс максималног елемента дуж редова (оса = 0)

    Наставимо да пронађемо индекс максималног елемента дуж редова (оса = 0).

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

    Овај излаз може бити мало тежак за разумевање, али разумећемо како функционише.

    Поставили смо параметар акис на нулу (акис = 0), јер бисмо желели да пронађемо индекс максималног елемента дуж редова. Стога, функција аргмак() враћа број реда у којем се појављује максимални елемент—за сваку од три колоне.

    Хајде да визуализујемо ово ради бољег разумевања.

    Из горњег дијаграма и аргмак() излаза, имамо следеће:

    • За прву колону са индексом 0, максимална вредност 10 се јавља у другом реду, на индексу = 1.
    • За другу колону са индексом 1, максимална вредност 9 се јавља у другом реду, на индексу = 1.
    • За трећу и четврту колону са индексима 2 и 3, максималне вредности 8 и 4 се јављају у другом реду, на индексу = 1.

    Управо због тога имамо излазни низ ([1, 1, 1, 1]) јер се максимални елемент дуж редова јавља у другом реду (за све колоне).

    Индекс максималног елемента дуж колона (оса = 1)

    Затим, употребимо функцију аргмак() да пронађемо индекс максималног елемента дуж колона.

    Покрените следећи исечак кода и посматрајте излаз.

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

    Можете ли рашчланити излаз?

    Поставили смо акис = 1 да бисмо израчунали индекс максималног елемента дуж колона.

    Функција аргмак() враћа, за сваки ред, број колоне у којој се јавља максимална вредност.

      Како да поправите Ксбок грешку 0к97е107дф

    Ево визуелног објашњења:

    Из горњег дијаграма и аргмак() излаза, имамо следеће:

    • За први ред са индексом 0, максимална вредност 7 се јавља у трећој колони, на индексу = 2.
    • За други ред са индексом 1, максимална вредност 10 се јавља у првој колони, на индексу = 0.

    Надам се да сада разумете шта је излаз, низ ([2, 0]) значи.

    Коришћење опционог излазног параметра у НумПи аргмак()

    Можете користити опциони параметар оут у функцији НумПи аргмак() да бисте сачували излаз у НумПи низу.

    Хајде да иницијализујемо низ нула за чување излаза претходног позива функције аргмак() – да пронађемо индекс максимума дуж колона (оса=1).

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

    Сада, хајде да поново погледамо пример проналажења индекса максималног елемента дуж колона (оса = 1) и поставимо оут на оут_арр који смо дефинисали горе.

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

    Видимо да Питхон интерпретер избацује ТипеЕррор, пошто је оут_арр подразумевано иницијализован на низ флоат-а.

    ---------------------------------------------------------------------------
    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'

    Стога, када постављате излазни параметар на излазни низ, важно је осигурати да је излазни низ исправног облика и типа података. Пошто су индекси низа увек цели бројеви, требало би да поставимо параметар дтипе на инт када дефинишемо излазни низ.

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

    Сада можемо да наставимо и да позовемо функцију аргмак() са параметрима осовине и излаза, и овај пут она ради без грешке.

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

    Излазу функције аргмак() сада се може приступити у низу оут_арр.

    print(out_arr)
    # Output
    [2 0]

    Закључак

    Надам се да вам је овај водич помогао да разумете како да користите функцију НумПи аргмак(). Примере кода можете покренути у Јупитер бележници.

    Хајде да прегледамо шта смо научили.

    • Функција НумПи аргмак() враћа индекс максималног елемента у низу. Ако се максимални елемент појављује више пута у низу а, онда нп.аргмак(а) враћа индекс првог појављивања елемента.
    • Када радите са вишедимензионалним низовима, можете користити опциони параметар оси да бисте добили индекс максималног елемента дуж одређене осе. На пример, у дводимензионалном низу: постављањем акис = 0 и акис = 1, можете добити индекс максималног елемента дуж редова и колона, респективно.
    • Ако желите да сачувате враћену вредност у другом низу, можете да подесите опциони излазни параметар на излазни низ. Међутим, излазни низ треба да буде компатибилног облика и типа података.

    Затим погледајте детаљан водич о Питхон сетовима.