Süleyman KAYA tarafından yazılmıştır.
Merhaba; ben Süleyman Kaya, bilgisayar bilimleri ve data science araştırmacısıyım. Bu yazımda NumPy kütüphanesinin ne olduğuna, NumPy dizileri ile çalışma, dizilerin indekslenmesi ve dizi operasyonlarına değindim. Bu yazıyı NumPy kütüphanesini yeni yeni keşfederken “beginner” sıfatıyla sizlerle paylaşıyorum, dolayısıyla benim gibi bu kütüphanenin yabancısı olan ve bir adım atmak isteyen beginner’lar için hoş bir yayın olacak gibi duruyor, sizin için faydalı olup olmayacağını anlamak maksadıyla konu başlıklarını incelemenizi tavsiye ederim, keyifli okumalar.
NumPy, veri analizinde kullanılan oldukça popüler bir kütüphanedir. Kullanım alanının geniş olmasından ve python listelerinden daha hızlı ve daha büyük verilerle çalışabilmesinden ötürü NumPy kütüphanesini birçok projede görmüş olabilirsiniz. Bu kütüphaneyi “pip install numpy” komudu ile kolayca elde edebilir, “import numpy” ile python projemize dahil edebiliriz.
numpy.array() methodunun içine göndereceğimiz bir liste, bize bir NumPy array’i olarak geri döner.
Çok boyutlu bir dizi oluşturmak istersek reshape() methodunu kullanarak tek bboyutu bir diziyi çok boyutlu yapıya dönüştürürüz. Örnek olarak yukarıda oluşturduğumuz 9 elemanlı array dizisini 3’e 3’lük bir matrise dönüştürelim:
arage() metodunun içine atılan başlangıç, bitiş ve adım değerleri ile ritmik bir şekilde değer artışı/azalmasıyla bir dizi oluşturulabilir.
Örnek:
Çıktısı:
Örnek:
Çıktısı:
zeros(x) metodu, içinde sadece float tipinde 0’ların bulunduğu x elemanlı bir NumPy dizisi oluşturmamızı sağlar.
Örnek:
Çıktısı:
ones(x) metodu, içinde sadece float tipinde 1’lerin bulunduğu x elemanlı bir NumPy dizisi oluşturmamızı sağlar.
Örnek:
Çıktısı:
Belli bir aralıkta ve eşit miktarda artışa sahip bir dizi oluşturmak istediğimizde bu methodu kullanırız. Yani başlangıç ve bitiş değerlerini 3 parametre miktarınca böler.
Örnek:
Çıktısı:
NumPy kütüphanesi içinde random isimli bir class barındırır ve bu class’ın içindeki randint(x, y, z) metodu ile rastgele x minimum, y maksimum olmak üzere x ile y (y hariç) arasında z kadar veya randint (y maksimum değer olmak kaydıyla) rastgele bir sayı üretilebilir.
Örnek:
Çıktısı:
Örnek:
Çıktısı:
random.rand(a) metodu ile 0 ile 1 arasında yalnızca pozitif olmak kaydıyla rastgele a kadar sayı üretebiliriz.
Örnek:
Çıktısı:
random.randn(a) metodu ile 0 ile 1 arasında pozitif veya negatif rastgele a kadar sayı üretebiliriz.
Örnek:
Çıktısı:
reshape() metodu ile tek boyutlu dizileri çok boyutlu dizilere dönüştürebiliriz.
Örnek:
Çıktısı:
Dizimizin içindeki en büyük değeri döndürür.
Örnek:
Çıktısı:
Dizimizin içindeki en küçük değeri döndürür.
Örnek:
Çıktısı:
Dizimizin içindeki verilen ortalamasını döndürür.
Örnek:
Çıktısı:
Dizimizin içindeki en büyük değerin indeksini döndürür.
Örnek:
Çıktısı:
Dizimizin içindeki en büyük değerin indeksini döndürür.
Örnek:
Çıktısı:
Bir dizi tanımlayalım:
Dizimizin 5. indeksindeki elemanını yazdıralım:
0 ile 3 indeks numaraları arasındaki değerleri yazdıralım:
veya
3. indeksten başlayıp son indeks değerine kadar olan verilerimizi getirelim:
Bütün dizi elemanlarını yazdırmak istersek ise :: kullanırız:
Dizimizi listedeki step sayısını -1 yaparak tersten yazıdralım:
Step sayısını -2 yapalım:
Şimdi iki boyutlu 3’e 3’lük bir matris dizi oluşturalım:
İki boyutlu dizimizin ilk elemanını alalım:
İki boyutlu dizimizin ikinci elemanını alalım:
İki boyutlu dizimizin üçüncü elemanını alalım:
Şimdi ise ki boyutlu dizimizin ilk elemanının ilk elemanını alalım:
İki boyutlu dizimizin ikinci elemanının birinci elemanını alalım:
İki boyutlu dizimizin üçüncü elemanının ikinci elemanını alalım:
Bütün satırların içindeki 2 indeksli değeri getirelim:
Bütün satırların içindeki 1 indeksli değeri getirelim:
Bütün satırların içindeki 0 indeksli değeri getirelim:
Bütün satırların 0’dan 2. indekse kadar olan tüm verilerini bir dizide saklayalım:
Çıktısı:
Bütün satırların 0’dan 3. indekse kadar olan tüm verilerini bir dizide saklayalım:
Çıktısı:
İki dizinin elemanlarını birbiriyle toplayalım ve yeni bir dizide sonuçları saklayalım:
Çıktısı:
Bir dizinin her elemanını 10 ile toplayalım:
Çıktısı:
İki dizinin elemanlarının farkını bulalım ve yeni bir dizide sonuçları saklayalım:
Çıktısı:
Bir dizinin her elemanını 10 ile çarpalım:
Çıktısı:
Bir dizinin her elemanının sinüsünü bulalım:
Çıktısı:
Bir dizinin her elemanının kosinüsünü bulalım:
Çıktısı:
Bir dizinin her elemanının karekökünü bulalım:
Çıktısı:
Bir dizinin her elemanının logaritmasını bulalım:
Çıktısı:
Kendinizi geliştirmek için aşağıda verilen görevleri tamamlamanızı öneririm. Soruların çözümünü yazdığım python dosyasına ise buradan ulaşabilirsiniz.
Sorular:
Umarım aradığınız pratik bilgiye ulaşmışsınızdır, keyifli çalışmalar.
[TR] Veri Analizi – NumPy
Merhaba; ben Süleyman Kaya, bilgisayar bilimleri ve data science araştırmacısıyım. Bu yazımda NumPy kütüphanesinin ne olduğuna, NumPy dizileri ile çalışma, dizilerin indekslenmesi ve dizi operasyonlarına değindim. Bu yazıyı NumPy kütüphanesini yeni yeni keşfederken “beginner” sıfatıyla sizlerle paylaşıyorum, dolayısıyla benim gibi bu kütüphanenin yabancısı olan ve bir adım atmak isteyen beginner’lar için hoş bir yayın olacak gibi duruyor, sizin için faydalı olup olmayacağını anlamak maksadıyla konu başlıklarını incelemenizi tavsiye ederim, keyifli okumalar.
NumPy Nedir?
NumPy, veri analizinde kullanılan oldukça popüler bir kütüphanedir. Kullanım alanının geniş olmasından ve python listelerinden daha hızlı ve daha büyük verilerle çalışabilmesinden ötürü NumPy kütüphanesini birçok projede görmüş olabilirsiniz. Bu kütüphaneyi “pip install numpy” komudu ile kolayca elde edebilir, “import numpy” ile python projemize dahil edebiliriz.
NumPy Dizileriyle Çalışma
NumPy Arrays (NumPy Dizileri)
numpy.array() methodunun içine göndereceğimiz bir liste, bize bir NumPy array’i olarak geri döner.
array = numpy.array([1,2,3,4,5,6,7,8,9])
Çok boyutlu bir dizi oluşturmak istersek reshape() methodunu kullanarak tek bboyutu bir diziyi çok boyutlu yapıya dönüştürürüz. Örnek olarak yukarıda oluşturduğumuz 9 elemanlı array dizisini 3’e 3’lük bir matrise dönüştürelim:
multi_dimensional_array = array.reshape(3,3) # 3 satır ve 3 sütundan oluşan bir dizi yapısı oluşturduk.
arange() Metodu
arage() metodunun içine atılan başlangıç, bitiş ve adım değerleri ile ritmik bir şekilde değer artışı/azalmasıyla bir dizi oluşturulabilir.
Örnek:
dizim = numpy.arange(1, 10) # 1’de 10’a kadar rakamların bulunduğu bir dizi oluşturalım, 3. parametre (adım) methoda gönderilmezse ardışık olarak ilerleriz
Çıktısı:
[1 2 3 4 5 6 7 8 9]
Örnek:
cift_rakamlar = numpy.arange(0, 10, 2)
Çıktısı:
[0 2 4 6 8]
zeros() Metodu
zeros(x) metodu, içinde sadece float tipinde 0’ların bulunduğu x elemanlı bir NumPy dizisi oluşturmamızı sağlar.
Örnek:
dizim = numpy.zeros(10)
Çıktısı:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
ones() Metodu
ones(x) metodu, içinde sadece float tipinde 1’lerin bulunduğu x elemanlı bir NumPy dizisi oluşturmamızı sağlar.
Örnek:
dizim = numpy.ones(10)
Çıktısı:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
linspace() Metodu
Belli bir aralıkta ve eşit miktarda artışa sahip bir dizi oluşturmak istediğimizde bu methodu kullanırız. Yani başlangıç ve bitiş değerlerini 3 parametre miktarınca böler.
Örnek:
dizim = numpy.linspace(0, 100, 5) # 0 ile 100 arasında 5 eşit artış miktarına sahip verilerin dizisi
Çıktısı:
[0. 25. 50. 75. 100.]
random.randint() Metodu
NumPy kütüphanesi içinde random isimli bir class barındırır ve bu class’ın içindeki randint(x, y, z) metodu ile rastgele x minimum, y maksimum olmak üzere x ile y (y hariç) arasında z kadar veya randint (y maksimum değer olmak kaydıyla) rastgele bir sayı üretilebilir.
Örnek:
rastgele_sayim = numpy.random.randint(0, 100)
Çıktısı:
1 #Rastgele üretilmiş bir sayı
Örnek:
rastgele_sayim = numpy.random.randint(0, 100, 10)
Çıktısı:
[1 2 4 8 16 32 64 128 256] #Rastgele üretilmiş sayılar dizisi
random.rand() Metodu
random.rand(a) metodu ile 0 ile 1 arasında yalnızca pozitif olmak kaydıyla rastgele a kadar sayı üretebiliriz.
Örnek:
sayim = numpy.random.rand(5)
Çıktısı:
[0.91606556, 0.70194255, 0.29389498, 0.79018207, 0.1190293 ]
random.randn() Metodu
random.randn(a) metodu ile 0 ile 1 arasında pozitif veya negatif rastgele a kadar sayı üretebiliriz.
Örnek:
sayim = numpy.random.randn(5)
Çıktısı:
[ 0.99869798 -0.99862 -1.29092941 0.42673477 1.20581078]
reshape() Metodu
reshape() metodu ile tek boyutlu dizileri çok boyutlu dizilere dönüştürebiliriz.
Örnek:
# İçinde 50 tane int veri tipinde değer barındıran bir ndarray’i 5’e 10’luk bir matrise dönüştürelim.
d1_array = numpy.arange(50)
d2_array = d1_array.reshape(5, 10)
print(d2_array)
Çıktısı:
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29]
[30 31 32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47 48 49]]
max() Metodu
Dizimizin içindeki en büyük değeri döndürür.
Örnek:
print(d2_array.max())
Çıktısı:
min() Metodu
Dizimizin içindeki en küçük değeri döndürür.
Örnek:
print(d2_array.min())
Çıktısı:
mean() Metodu
Dizimizin içindeki verilen ortalamasını döndürür.
Örnek:
print(d2_array.mean())
Çıktısı:
argmax() Metodu
Dizimizin içindeki en büyük değerin indeksini döndürür.
Örnek:
print(d1_array.argmax())
Çıktısı:
argmin() Metodu
Dizimizin içindeki en büyük değerin indeksini döndürür.
Örnek:
print(d1_array.argmax())
Çıktısı:
NumPy Dizilerinin Indekslenmesi
Bir dizi tanımlayalım:
sayilar = numpy.array([0,5,10,15,20,25,50,75])
Dizimizin 5. indeksindeki elemanını yazdıralım:
print(sayilar[5]) # => 25
print(sayilar[-3]) # => 25
0 ile 3 indeks numaraları arasındaki değerleri yazdıralım:
print(sayilar[0:3]) # => [0 5 10]
veya
print(sayilar[:3]) # => [0 5 10]
3. indeksten başlayıp son indeks değerine kadar olan verilerimizi getirelim:
print(sayilar[3:]) # => [15 20 25 50 75]
Bütün dizi elemanlarını yazdırmak istersek ise :: kullanırız:
print(sayilar[::]) # => [0,5,10,15,20,25,50,75]
Dizimizi listedeki step sayısını -1 yaparak tersten yazıdralım:
print(sayilar[::-1]) # => [75, 50, 25, 20, 15, 10, 5, 0]
Step sayısını -2 yapalım:
[75, 25, 15, 5]
Şimdi iki boyutlu 3’e 3’lük bir matris dizi oluşturalım:
numbers = numpy.array([[0,5,10],[15,20,25],[50,75,85]])
İki boyutlu dizimizin ilk elemanını alalım:
print(numbers[0]) # => [0 5 10]
İki boyutlu dizimizin ikinci elemanını alalım:
print(numbers[1]) # => [15,20,25]
İki boyutlu dizimizin üçüncü elemanını alalım:
print(numbers[2]) # => [50,75,85]
Şimdi ise ki boyutlu dizimizin ilk elemanının ilk elemanını alalım:
print(numbers[0,1]) # => [0]
İki boyutlu dizimizin ikinci elemanının birinci elemanını alalım:
print(numbers[1,1]) # => [15]
İki boyutlu dizimizin üçüncü elemanının ikinci elemanını alalım:
print(numbers[2,1]) # => [75]
Bütün satırların içindeki 2 indeksli değeri getirelim:
print(numbers[:, 2]) # => [10 25 85]
Bütün satırların içindeki 1 indeksli değeri getirelim:
print(numbers[:, 1]) # => [5 20 75]
Bütün satırların içindeki 0 indeksli değeri getirelim:
print(numbers[:, 1]) # => [0 15 50]
Bütün satırların 0’dan 2. indekse kadar olan tüm verilerini bir dizide saklayalım:
dizim = numbers[:, :2]; print(dizim)
Çıktısı:
[[ 0 5]
[15 20]
[50 75]]
Bütün satırların 0’dan 3. indekse kadar olan tüm verilerini bir dizide saklayalım:
dizim = numbers[:, :3]; print(dizim)
Çıktısı:
[[ 0 5 10]
[15 20 25]
[50 75 85]]
NumPy Dizi Operasyonları
İki dizinin elemanlarını birbiriyle toplayalım ve yeni bir dizide sonuçları saklayalım:
numbers1 = numpy.random.randint(10, 100, 6)
numbers2 = numpy.random.randint(10, 100, 6)
sum = numbers1 + numbers2; print(sum)
Çıktısı:
[ 83 80 143 56 61 103]
Bir dizinin her elemanını 10 ile toplayalım:
numbers1 = numpy.random.randint(10, 100, 6)
sum = numbers1 + 10; print(sum)
Çıktısı:
[ 50 104 40 69 102 108]
İki dizinin elemanlarının farkını bulalım ve yeni bir dizide sonuçları saklayalım:
numbers1 = numpy.random.randint(10, 100, 6)
numbers2 = numpy.random.randint(10, 100, 6)
sum = numbers1-numbers2; print(sum)
Çıktısı:
[-32 35 34 -72 4 -81]
Bir dizinin her elemanını 10 ile çarpalım:
numbers1 = numpy.random.randint(10, 100, 6)
sum = numbers1*10; print(sum)
Çıktısı:
[110 360 480 590 660 830]
Bir dizinin her elemanının sinüsünü bulalım:
numbers1 = numpy.random.randint(10, 100, 6)
result = numpy.sin(numbers1); print(result)
Çıktısı:
[-0.38778164 -0.89792768 -0.7391807 0.90178835 0.52908269 0.86006941]
Bir dizinin her elemanının kosinüsünü bulalım:
numbers1 = numpy.random.randint(10, 100, 6)
result = numpy.cos(numbers1); print(result)
Çıktısı:
[ 0.90744678 -0.95765948 0.67350716 -0.74805753 -0.18043045 0.96496603]
Bir dizinin her elemanının karekökünü bulalım:
numbers1 = numpy.random.randint(10, 100, 6)
result = numpy.sqrt(numbers1); print(result)
Çıktısı:
[-0.38778164 -0.89792768 -0.7391807 0.90178835 0.52908269 0.86006941]
Bir dizinin her elemanının logaritmasını bulalım:
numbers1 = numpy.random.randint(10, 100, 6)
result = numpy.log(numbers1); print(result)
Çıktısı:
[3.58351894 4.49980967 4.48863637 4.55387689 4.39444915 2.39789527]
Çoklu dizilerle çalışma
mnumbers1 = numbers1.reshape(2,3)
mnumbers2 = numbers2.reshape(2,3)
result = np.vstack((mnumbers1, mnumbers2)) # Dizileri yatay şekilde birleştirir, satırlar halinde
result = np.hstack((mnumbers1, mnumbers2)) # Dizileri dikey şekilde birleştirir, sütunlar halinde
# Dizi elemanlarının belirli bir şarta uyup uymadığını kontrol edelim
result = 50 > mnumbers1
print(result)
Bonus: Uygulama
Kendinizi geliştirmek için aşağıda verilen görevleri tamamlamanızı öneririm. Soruların çözümünü yazdığım python dosyasına ise buradan ulaşabilirsiniz.
Sorular:
# 1- (10,15,30,45,60) değerlerine sahip numpy dizisi oluşturunuz
# 2- (5–15) arasındaki sayılarla numpy dizisi oluşturunuz.
# 3- (50–100) arasında 5’er 5’er artarak numpy dizisi oluşturunuz
# 4- 10 elemanlı sıfırlardan oluşan bir dizi oluşturunuz.
# 5- 10 elemanlı birlerden oluşan bir dizi oluşturunuz.
# 6- (0–100) arasında eşit aralıklı 5 sayı üretin.
# 7- (10–30) arasında rastgee 5 tane tamsayı üretin.
# 8 — [-1 ile 1] arasında 10 adet sayı üretin
# 9- (3×5) boyutlarında (10–50) arasında rastgele bir matris oluşturunuz.
# 10- Üretilen matrisin satır ve sütunlarının toplamlarını hesaplayınız.
# 11- Üretilen matrisin en büyük, en küçük ve ortalama değerleri nelerdir?
# 12- Üretilen matrisin en büyük değerinin indeksi kaçtır?
# 13- (10–20) arasındaki sayıları içeren dizinin ilk 3 elemanını seçiniz.
# 14- Üretilen dizinin elemanlarını tersten yazdırın.
# Şimdi listeyi multi-dimensional yapalım
# 15- Üretilen matrisin ilk satırını seçiniz
# 16- Üretilen matrisin 2. satır 3. sütundaki elemanı hangisidir.
# 17- Üretilen matrisin tüm satırlardaki ilk elemanlarını seçiniz
# 18- Üretilen matrisin her bir elemanının karesini alınız.
# 19- Üretilen matris elemanlarının hangisi pozitif çift sayıdır? (Aralığı -50, +50 arasında yapınız)
Kapanış
Umarım aradığınız pratik bilgiye ulaşmışsınızdır, keyifli çalışmalar.
Moderatör tarafında düzenlendi: