Temel kullanım
NumPy’de koşula bağlı seçim yapmak içinnp.where() kullanılır. Koşulu sağlayan elemanlar için bir değer, sağlamayanlar için başka bir değer üretmek istiyorsanız np.where(koşul, doğru_değer, yanlış_değer) biçimini kullanın. Böylece mevcut diziyi değiştirmeden koşullu sonucu yeni bir dizi olarak elde edersiniz.Aşağıdaki varsayımsal örnekte 50 ve üzerindeki puanlar
"Geçti", diğerleri "Kaldı" olarak etiketlenir:
Python:
import numpy as np
puanlar = np.array([35, 50, 72, 48, 90])
sonuc = np.where(puanlar >= 50, "Geçti", "Kaldı")
print(sonuc)
Çıktı:
Kod:
['Kaldı' 'Geçti' 'Geçti' 'Kaldı' 'Geçti']
Burada
puanlar >= 50 ifadesi her eleman için True veya False üretir. True olan konumlarda "Geçti", False olan konumlarda "Kaldı" kullanılır. Bu işlem puanlar dizisini değiştirmez; yalnızca yeni bir sonuç dizisi oluşturur.Adım adım uygulama
- NumPy’yi içe aktarın. Kodun başına
import numpy as npsatırını ekleyin; böylece işlevlerenpkısaltmasıyla erişebilirsiniz. - Koşul uygulanacak diziyi oluşturun veya yükleyin. Örneğin
puanlar = np.array([35, 50, 72, 48, 90])satırı sayısal bir NumPy dizisi oluşturur. - Koşulu belirleyin.
puanlar >= 50ifadesi, her puanın 50’ye eşit veya büyük olup olmadığını denetler. - Doğru ve yanlış sonuçları verin.
np.where(puanlar >= 50, "Geçti", "Kaldı")çağrısı koşula göre metinleri seçer ve sonucusonucdeğişkenine atar. - Sonucu kontrol edin.
print(sonuc)çıktısında her konum için beklenen etiket görünmelidir. Eleman sayısı, giriş dizisinin eleman sayısıyla aynı kalır.
Sayılarla koşullu değer değiştirme
Sonuç olarak metin yerine sayısal değer de üretebilirsiniz. Örneğin negatif sayıları sıfırlamak için:
Python:
sayilar = np.array([-3, 0, 4, -1, 8])
pozitif_veya_sifir = np.where(sayilar < 0, 0, sayilar)
print(pozitif_veya_sifir)
Çıktı:
Kod:
[0 0 4 0 8]
Bu kullanım negatif değerleri sıfırla değiştirir; negatif olmayan değerleri ise oldukları gibi korur. Orijinal
sayilar dizisi yine değişmez.Birden fazla koşulu birleştirme
Birden fazla koşul kullanırken NumPy’de Python’dakiand ve or yerine & ve | operatörlerini kullanın. Her koşulu paranteze almak gerekir:
Python:
sayilar = np.array([5, 12, 18, 25, 31])
sonuc = np.where((sayilar >= 10) & (sayilar <= 25), "Aralıkta", "Dışında")
print(sonuc)
Çıktı:
Kod:
['Dışında' 'Aralıkta' 'Aralıkta' 'Aralıkta' 'Dışında']
& “ve”, | ise “veya” anlamında kullanılır. Parantezleri kaldırmak, işleç önceliği nedeniyle beklenmeyen bir koşul değerlendirmesine yol açabilir.np.where ile yalnızca konum bulma
np.where(koşul) biçiminde yalnızca koşulu verirseniz koşulu sağlayan elemanların indisleri, her boyut için bir indis dizisi içeren tuple olarak döner. x ve y değerleri birlikte verilmeli veya ikisi de atlanmalıdır; yalnızca birini vermek hata üretir. Aşağıdaki örnek tek boyutlu bir dizi kullanır:
Python:
sayilar = np.array([5, 12, 18, 25])
indisler = np.where(sayilar > 15)
print(indisler)
Çıktı:
Kod:
(array([2, 3]),)
Sonuçtaki
2 ve 3, 15’ten büyük değerlerin sıfırdan başlayan indisleridir. Değerlerin kendisini almak isterseniz sayilar[sayilar > 15] biçimindeki Boolean seçimi daha doğrudan olabilir.Aşağıdaki ayrım, hangi biçimi seçmeniz gerektiğini netleştirir:
| İhtiyaç | Uygun kullanım | Sonuç |
|---|---|---|
| Her elemana koşula göre yeni değer vermek | np.where(koşul, doğru, yanlış) | Boyut uyumluluğuna (broadcasting) göre oluşan yeni dizi |
| Koşulu sağlayan indisleri bulmak | np.where(koşul) | Koşulu sağlayan konumlar |
| Koşulu sağlayan değerleri almak | dizi[koşul] | Yalnız seçilen değerler |
np.where(koşul, doğru, yanlış) tüm konumlar için seçim yaparken Boolean seçimi yalnızca koşulu sağlayan elemanları döndürür. Bu nedenle koşulu sağlamayan elemanların da sonuçta korunması gerekiyorsa np.where kullanın; yalnızca eşleşen kayıtları süzmek istiyorsanız Boolean seçimi tercih edin.Yaygın hatalar
Koşulların birleşimindeand veya or kullanmak NumPy dizilerinde genellikle belirsiz doğruluk hatasına yol açar. Bunun yerine parantezli & ve | kullanın. Ayrıca np.where içindeki doğru ve yanlış sonuçların diziyle uyumlu olması gerekir; tek bir sabit değer her elemana uygulanabilir, ancak farklı uzunluktaki diziler için NumPy’nin boyut uyumluluğu kuralları geçerlidir.Sonucu doğrularken önce koşulun kendisini yazdırın. Örneğin
print(puanlar >= 50) çıktısı beklenen True ve False değerlerini göstermiyorsa sorun np.where çağrısında değil, koşulun veya giriş verisinin kurulma biçimindedir.
Son düzenleme: