Python'da NumPy argmax() İşlevi Nasıl Kullanılır
Yayınlanan: 2022-09-14Bu öğreticide, dizilerdeki maksimum öğenin dizinini bulmak için NumPy argmax() işlevinin nasıl kullanılacağını öğreneceksiniz.
NumPy, Python'da bilimsel hesaplama için güçlü bir kitaplıktır; Python listelerinden daha performanslı N boyutlu diziler sağlar. NumPy dizileriyle çalışırken gerçekleştireceğiniz yaygın işlemlerden biri dizideki maksimum değeri bulmaktır. Ancak bazen maksimum değerin oluştuğu dizini bulmak isteyebilirsiniz.
argmax()
işlevi, hem tek boyutlu hem de çok boyutlu dizilerde maksimumun dizinini bulmanıza yardımcı olur. Nasıl çalıştığını öğrenmek için devam edelim.
NumPy Dizisinde Maksimum Öğe Dizini Nasıl Bulunur?
Bu öğreticiyi takip etmek için Python ve NumPy'nin kurulu olması gerekir. Bir Python REPL başlatarak veya bir Jupyter not defteri başlatarak kod yazabilirsiniz.
İlk olarak, NumPy'yi normal takma ad np
altında içe aktaralım.
import numpy as np
Bir dizideki (isteğe bağlı olarak belirli bir eksen boyunca) maksimum değeri elde etmek için NumPy max()
işlevini kullanabilirsiniz.
array_1 = np.array([1,5,7,2,10,9,8,4]) print(np.max(array_1)) # Output 10
Bu durumda, np.max(array_1)
, doğru olan 10 değerini döndürür.
Dizide maksimum değerin oluştuğu dizini bulmak istediğinizi varsayalım. Aşağıdaki iki adımlı yaklaşımı uygulayabilirsiniz:
- Maksimum elemanı bulun.
- Maksimum elemanın indeksini bulun.
array_1
'da, sıfır indekslemeyi takiben indeks 4'te maksimum 10 değeri oluşur. İlk eleman 0 indeksindedir; ikinci öğe dizin 1'dedir, vb.

Maksimumun gerçekleştiği dizini bulmak için NumPy where() işlevini kullanabilirsiniz. np.where(condition)
, condition
True
olduğu tüm dizinlerin bir dizisini döndürür.
Diziye dokunmanız ve ilk dizindeki öğeye erişmeniz gerekecek. Maksimum değerin nerede olduğunu bulmak için condition
array_1==10
olarak ayarladık; array_1
içindeki maksimum değerin 10 olduğunu hatırlayın.
print(int(np.where(array_1==10)[0])) # Output 4
np.where()
'i yalnızca koşulla kullandık, ancak bu işlevi kullanmak için önerilen yöntem bu değil.
Not: NumPy where() Function :
np.where(condition,x,y)
döndürür:– Koşul
True
olduğundax
öğesinden gelen öğeler ve
– KoşulFalse
olduğunday
öğesinden gelen öğeler.
Bu nedenle, np.max()
ve np.where()
işlevlerini zincirleyerek, maksimum öğeyi ve ardından oluştuğu dizini bulabiliriz.
Yukarıdaki iki adımlı işlem yerine, dizideki maksimum öğenin dizinini almak için NumPy argmax() işlevini kullanabilirsiniz.
NumPy argmax() İşlevinin Sözdizimi
NumPy argmax() işlevini kullanmak için genel sözdizimi aşağıdaki gibidir:
np.argmax(array,axis,out) # we've imported numpy under the alias np
Yukarıdaki sözdiziminde:
- dizi , geçerli herhangi bir NumPy dizisidir.
- eksen isteğe bağlı bir parametredir. Çok boyutlu dizilerle çalışırken, belirli bir eksen boyunca maksimumun indeksini bulmak için axis parametresini kullanabilirsiniz.
- out başka bir isteğe bağlı parametredir.
argmax()
işlevinin çıktısını depolamak içinout
parametresini bir NumPy dizisine ayarlayabilirsiniz.
Not : NumPy sürüm 1.22.0'dan itibaren ek bir
keepdims
parametresi vardır.argmax()
işlev çağrısındaaxis
parametresini belirttiğimizde, dizi o eksen boyunca küçülür. Ancakkeepdims
parametresiniTrue
olarak ayarlamak, döndürülen çıktının giriş dizisiyle aynı şekilde olmasını sağlar.
Maksimum Öğenin Dizinini Bulmak için NumPy argmax()'ı Kullanma
#1 . array_1 içindeki maksimum öğenin dizinini bulmak için NumPy argmax() işlevini array_1
.
array_1 = np.array([1,5,7,2,10,9,8,4]) print(np.argmax(array_1)) # Output 4
argmax()
işlevi, doğru olan 4 değerini döndürür!
# 2 . 10 iki kez olacak şekilde array_1
yeniden tanımlarsak, argmax()
işlevi yalnızca ilk oluşumun dizinini döndürür.
array_1 = np.array([1,5,7,2,10,10,8,4]) print(np.argmax(array_1)) # Output 4
Örneklerin geri kalanı için örnek 1'de tanımladığımız array_1
öğelerini kullanacağız.
2B Dizide Maksimum Öğenin Dizinini Bulmak için NumPy argmax()'ı Kullanma
NumPy array_1
dizisini iki satır ve dört sütunlu iki boyutlu bir diziye yeniden şekillendirelim.
array_2 = array_1.reshape(2,4) print(array_2) # Output [[ 1 5 7 2] [10 9 8 4]]
İki boyutlu bir dizi için, 0 ekseni satırları ve 1 ekseni sütunları belirtir. NumPy dizileri sıfır indekslemeyi takip eder. Dolayısıyla, NumPy dizisi array_2
için satır ve sütunların indeksleri aşağıdaki gibidir:

Şimdi, iki boyutlu dizideki argmax()
işlevini çağıralım, array_2
.
print(np.argmax(array_2)) # Output 4
İki boyutlu dizide argmax()
rağmen, yine de 4 döndürür. Bu, önceki bölümdeki tek boyutlu dizinin çıktısı olan array_1
ile aynıdır.
Bu neden oluyor?
Bunun nedeni, eksen parametresi için herhangi bir değer belirtmemiş olmamızdır. Bu eksen parametresi ayarlanmadığında, varsayılan olarak argmax()
işlevi, düzleştirilmiş dizi boyunca maksimum öğenin dizinini döndürür.
Düzleştirilmiş dizi nedir? d1 x d2 x … x dN şeklinde N boyutlu bir dizi varsa, burada d1, d2, dN'ye kadar N boyutları boyunca dizinin boyutlarıdır, o zaman düzleştirilmiş dizi uzun tek boyutlu bir boyut dizisidir d1 * d2 * … * dN.
array_2
için düzleştirilmiş dizinin nasıl göründüğünü kontrol etmek için, aşağıda gösterildiği gibi flatten()
yöntemini çağırabilirsiniz:
array_2.flatten() # Output array([ 1, 5, 7, 2, 10, 9, 8, 4])
Satırlar Boyunca Maksimum Elemanın Dizini (eksen = 0)
Satırlar boyunca maksimum elemanın indeksini bulmaya devam edelim (eksen = 0).
np.argmax(array_2,axis=0) # Output array([1, 1, 1, 1])
Bu çıktıyı anlamak biraz zor olabilir, ancak nasıl çalıştığını anlayacağız.
Satırlar boyunca maksimum elemanın indeksini bulmak istediğimizden, axis
parametresini sıfıra ( axis = 0
) ayarladık. Bu nedenle, argmax()
işlevi, üç sütunun her biri için maksimum öğenin gerçekleştiği satır numarasını döndürür.
Bunu daha iyi anlamak için görselleştirelim.

Yukarıdaki şemadan ve argmax()
çıktısından aşağıdakilere sahibiz:
- 0 dizinindeki ilk sütun için, ikinci satırda dizin = 1'de maksimum 10 değeri oluşur.
- Dizin 1'deki ikinci sütun için, ikinci satırda dizin = 1'de maksimum değer 9 oluşur.
- Dizin 2 ve 3'teki üçüncü ve dördüncü sütunlar için, maksimum 8 ve 4 değerlerinin her ikisi de ikinci satırda, dizin = 1'de gerçekleşir.
Tam olarak bu nedenle çıktı array([1, 1, 1, 1])
sahibiz çünkü satırlar boyunca maksimum öğe ikinci satırda (tüm sütunlar için) oluşur.
Sütunlar Boyunca Maksimum Elemanın İndeksi (eksen = 1)
Ardından, sütunlar boyunca maksimum öğenin dizinini bulmak için argmax()
işlevini kullanalım.
Aşağıdaki kod parçacığını çalıştırın ve çıktıyı izleyin.
np.argmax(array_2,axis=1)
array([2, 0])
Çıktıyı ayrıştırabilir misin?
Sütunlar boyunca maksimum elemanın indeksini hesaplamak için axis = 1
ayarladık.
argmax()
işlevi, her satır için maksimum değerin oluştuğu sütun numarasını döndürür.
İşte görsel bir açıklama:

Yukarıdaki şemadan ve argmax()
çıktısından aşağıdakilere sahibiz:
- Dizin 0'daki ilk satır için, dizin = 2'de üçüncü sütunda maksimum değer 7 oluşur.
- Dizin 1'deki ikinci satır için, ilk sütunda dizin = 0'da maksimum değer 10 oluşur.
Artık array([2, 0])
çıktısının ne anlama geldiğini anladığınızı umuyorum.
NumPy argmax() içinde İsteğe bağlı çıkış Parametresini Kullanma
Çıktıyı bir NumPy dizisinde depolamak için NumPy argmax() işlevindeki isteğe bağlı out
parametresini kullanabilirsiniz.
Önceki argmax()
işlev çağrısının çıktısını depolamak için bir sıfır dizisini başlatalım – sütunlar boyunca maksimumun dizinini bulmak için ( axis= 1
).
out_arr = np.zeros((2,)) print(out_arr) [0. 0.]
Şimdi, sütunlar boyunca ( axis = 1
) maksimum elemanın indeksini bulma örneğini tekrar gözden geçirelim ve yukarıda tanımladığımız out_arr
out
ayarlayalım.
np.argmax(array_2,axis=1,out=out_arr)
Python yorumlayıcısının bir TypeError
attığını görüyoruz, çünkü out_arr
varsayılan olarak bir dizi yüzer olarak başlatıldı.
--------------------------------------------------------------------------- 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'
Bu nedenle, çıkış dizisine out
parametresini ayarlarken, çıkış dizisinin doğru şekil ve veri türünde olduğundan emin olmak önemlidir. Dizi indeksleri her zaman tamsayı olduğundan, çıktı dizisini tanımlarken dtype
parametresini int
olarak ayarlamalıyız.
out_arr = np.zeros((2,),dtype=int) print(out_arr) # Output [0 0]
Şimdi devam edip hem axis
hem de out
parametreleriyle argmax()
işlevini çağırabiliriz ve bu sefer hatasız çalışır.
np.argmax(array_2,axis=1,out=out_arr)
argmax()
işlevinin çıktısına artık out_arr
dizisinden erişilebilir.
print(out_arr) # Output [2 0]
Çözüm
Umarım bu eğitim, NumPy argmax() işlevini nasıl kullanacağınızı anlamanıza yardımcı olmuştur. Kod örneklerini bir Jupyter not defterinde çalıştırabilirsiniz.
Öğrendiklerimizi gözden geçirelim.
- NumPy argmax() işlevi, bir dizideki maksimum öğenin dizinini döndürür. a dizisinde maksimum öğe birden fazla kez ortaya çıkıyorsa, np.argmax(a) öğenin ilk oluşumunun dizinini döndürür.
- Çok boyutlu dizilerle çalışırken, belirli bir eksen boyunca maksimum öğenin dizinini almak için isteğe bağlı eksen parametresini kullanabilirsiniz. Örneğin, iki boyutlu bir dizide: axis = 0 ve axis = 1 olarak ayarlayarak, sırasıyla satırlar ve sütunlar boyunca maksimum elemanın indeksini alabilirsiniz.
- Döndürülen değeri başka bir dizide saklamak istiyorsanız, çıkış dizisine isteğe bağlı out parametresini ayarlayabilirsiniz. Ancak, çıktı dizisi uyumlu şekil ve veri türünde olmalıdır.
Ardından, Python kümeleriyle ilgili ayrıntılı kılavuza göz atın.