NumPy Veri Tipleri ve NumPy’da Array Oluşturma – Bölüm 7

NumPy Veri Tipleri ve NumPy’da Array Oluşturma

Python’da kullanılan yerleşik veri tiplerini hatırlayalım:

NumPy Veri Tipleri

NumPy, Python’dan çok daha fazla sayıda sayısal veri tipini desteklemektedir. Ayrıca NumPy’a özel bazı veri tipleri de bulunmaktadır. Örneğin tamsayılar için i, işaretsiz tamsayılar için u gibi sadece bir karakter içeren veri tipleri kullanılır. Aşağıda NumPy’daki veri tipleri ve bunları temsil etmek için kullanılan karakterlerin bir listesi bulunmaktadır.

NumPy, C’dekine benzer şekilde ilkel veri tiplerini destelemektedir. Aşağıdaki listede belirtilen veri tipleri platforma bağlı olarak tanımlanan veri tipleridir.

Platformdan bağımsız olarak NumPy’da, aşağıdaki veri tipleri de yer almaktadır.

Bazı ileri veri tipleri yukarıdaki tabloda belirtilmemiştir. Temelde NumPy’da beş temel sayısal veri tipi bulunmaktadır; Boolean (bool), integer (int), unsigned integer (uint), float ve complex.

Adlarının yanında sayıları olan veri tipleri, veri tipinin bit boyutunu göstermektedir (yani, bellekte tek bir değeri temsil etmek için kaç bit gerekli). İnt ve intp gibi bazı türler, platformlara bağlı olarak farklı bit boyutlarına sahiptir (örneğin 32 bit ve 64 bit makinelere bağlı olarak). Düşük seviyeli kodlarla (C, Fortran gibi) arayüz oluştururken bunlar dikkate alınmalıdır.

Çıktısı:

NumPy array nesnesinin, array’in hangi veri tipinde olduğunu döndüren dtype adlı bir özelliği vardır.

dtype, değişkenin veri tipi hakkında bit genişliği ve bayt sırası gibi bilgiler de içerir.

Çıktısı:

Varolan bir dizinin veri tipini değiştirmenin en iyi yolu, dizinin astype yöntemiyle bir kopyasını oluşturmaktır. astype fonksiyonu dizinin bir kopyasını oluşturur ve herhangi bir veri tipini fonksiyonun parametresi olarak belirlemenizi sağlar.

Veri tipi, float için ‘f’, integer için ‘i’ şeklinde bir string kullanılarak belirtilebilir veya veri tipini doğrudan float veya tamsayı gibi kullanabilirsiniz.

Python’daki Dizi Benzeri Yapıları NumPy’da Array’e Dönüştürme

Python’daki dizi benzeri bir yapıda düzenlenmiş sayısal veriler, array () fonksiyonu yardımıyla NumPy dizilere dönüştürülebilir. Python’daki en belirgin dizi benzeri yapılar list’ler ve tuple’lardır. Python’daki diğer dizi benzeri yapıların array () fonksiyonu kullanılarak NumPy bir diziye dönüştürülüp dönüştürülemeyeceğini öğrenmek istiyorsanız deneyin ve çalışıp çalışmadığını görün!

NumPy’da dizi oluşturmak için array () fonksiyonunu kullanıyoruz, bundan bir önceki bölümde bahsetmiştik. Bu fonksiyonun güzel bir özelliği isteğe bağlı olarak kullanılabilir. Array() fonksiyonu dtype’ı bağımsız bir değişken olarak içine alabilir. Böylece dizi elemanlarını hangi veri tipine göre tanımlayacağınıza baştan karar verebilirsiniz. Aşağıdaki örnekte sayısal NumPy dizisi her bir elemanı 5 byte’lık string bir diziye dönüştürüldü.

Çıktısı:

NumPy’da kullnılan i, u, f, S ve U veri tiplerinde boyutu baştan tanımlamak mümkün. Örneğin mevcut sayısal değerler içeren bir diziden 4byte’lık integer değerler içeren bir dizi oluşturalım.

Çıktısı:

Bunu bildiğim iyi oldu!

Dizi elemanları içinde hem string hem de sayısal değerler varsa dizi string veri tipine dönüştürülebilir ancak sayısal veri tipine dönüştürülmek istenirse NumPy bir ValueError hatası verir. ValueError hatası bir fonksiyona iletilen bağımsız değişken türü beklenmedik veya yanlış olduğunda ortaya çıkan hatadır.

Çıktısı:

Çıktısı:

NumPy’da Sıfırdan Array Oluşturmak

NumPy sıfırdan diziler oluşturmak için yerleşik fonksiyonlara sahiptir. Bu fonksiyonlardan biri zeros (shape), belirtilen şekle sahip 0 değerlerle dolu bir dizi oluşturur. Varsayılan dtype’ı float64’tür. Aşağıdaki örneği inceleyelim.

Çıktısı:

Benzer şekilde ones (shape) belirtilen şekle sahip 1 değerleriyle dolu bir dizi oluşturur. Diğer tüm özellikleri zeros() ile aynıdır.

Çıktısı:

arange () fonksiyonu düzenli olarak artan değerlere sahip diziler oluşturur. Aşağıdaki örneği inceleyelim.

Çıktısı:

Bunu bildiğim iyi oldu!

Arange() fonksiyonuna benzer şekilde kullanılan linspace (), belirtilen sayıda öğeye sahip ve belirtilen başlangıç ve bitiş değerleri arasında eşit aralıklı diziler oluşturur.  linspace() fonksiyonunun avantajı; arange ()’in genellikle keyfi olarak başlatma, durdurma ve adım değerleri üretmesi ama linspace()’in elemanların sayısını, başlangıç ve bitiş noktasını garanti etmesidir.

Çıktısı:

Taşma Hataları (Overflow Errors)

NumPy sayısal veri tiplerinin sabit boyutu mevcut olandan daha fazla bellek gerektirdiğinde taşma hatalarına neden olabilir. Örneğin, numpy.power() fonksiyonu(üs alma fonksiyonu) ile ilgili aşağıdaki örneği inceleyelim.

Çıktısı:

Yukarıdaki örnekte NumPy, 64 bit tamsayılar için 100 üzeri 8 değerini doğru olarak değerlendirir, ancak 32 bit tamsayılar için 1874919424 gibi yanlış değer üretir.

NumPy ve Python ‘da integer veri tipinin davranışı aynı değildir. Diğer bir ifade ile taşma hataları konusunda Python ile kullanılan int ile NumPy ile kullanılan int için farklılık göstermektedir. Python’ın int boyutu esnektir. Yani, Python int veri tipi herhangi bir tamsayıyı alacak şekilde genişleyebilir.

Bunu bildiğim iyi oldu!

NumPy kullanırken kullandığınız platforma bağlı olarak int ve float veri tiplerinin alabileceği minimum veya maksimum değerleri öğrenmek için numpy.iinfo fonksiyonu kullanılabilir. Aşağıdaki örneği inceleyelim.

Çıktısı:

64 bit tamsayılar size hala küçük geliyorsa, sonuç float’a çevrilebilir. Float sayılar daha geniştir, ancak size net olmayan olası değerler sunar.

Çıktısı:

NumPy’da array(dizi) oluşturmak için çeşitli yöntemler kullanılabilir; Python’daki dizi benzeri yapılarından (örneğin list, tuple gibi) dönüştürerek, NumPy içinde dizi oluşturma nesneleri (örneğin arange, ones, zeros gibi). Bu bölümde bu iki yöntemin nasıl kullanıldığına yer verilmiştir. Ancak bu yöntemler dışında NumPy dizileri standart disklerden veya diğer özel bir formattan okunarak, kütüphanelerin hazır fonksiyonları kullanılarak (örneğin random(), indices() gibi) da oluşturulabilir.

Bu bölümde Numpy veri tiplerinin Python veri tiplerinden ayrılan özelliklerine ve NumPy’da sıfırdan dizi oluşturma yöntemlerinden bazılarına değindim.

Kaynaklar: https://numpy.org/, https://www.w3schools.com/

Bu bölümün Github kaynakları için tıklayınız.

Bir önceki bölüm: NumPy’a Giriş – Bölüm 6

Bir sonraki bölüm: NumPy’da Copy, View, Shape, Reshape – Bölüm 8

Gelecek bölümde görüşmek dileğiyle.

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.