Sitelet https://www.datacamp.com/tr/tutorial/python-numpy-tutorial
Ana içeriğe atla

Python Numpy Array Eğitimi

Yeni başlayanlar için NumPy eğitimi: Bir NumPy dizisi oluşturmayı, yayınlamayı (broadcasting) kullanmayı, değerlere erişmeyi, dizileri manipüle etmeyi ve çok daha fazlasını öğreneceksiniz.
Güncel 3 Eki 2026  · 15 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

NumPy, tıpkı SciPy, Scikit-Learn, pandas ve benzeri paketler gibidir. Veri bilimi öğrenirken asla gözden kaçırmamanız gereken Python paketleridir; bunun başlıca nedeni, bu kütüphanenin Python listelerine göre daha kompakt olması, öğeleri okuma ve yazmada daha hızlı erişim sağlaması, daha kullanışlı ve daha verimli olması gibi avantajlar sunan bir dizi veri yapısı sağlamasıdır.

Bu NumPy eğitimi tam olarak buna odaklanacak. Size yalnızca NumPy dizilerinin gerçekte ne olduğunu ve Python’u nasıl kurabileceğinizi göstermekle kalmayacak; aynı zamanda dizileri nasıl oluşturacağınızı (veriniz dosyalardan geliyor olsa bile), yayınlamanın (broadcasting) nasıl çalıştığını, nasıl yardım alabileceğinizi, dizilerinizi nasıl manipüle edeceğinizi ve nasıl görselleştireceğinizi de öğreneceksiniz.

NumPy dizileri ve veri bilimi yolculuğunuzda ihtiyaç duyacağınız diğer veri yapıları hakkında daha fazla bilgi edinmek isterseniz, NumPy’ye bir bölüm ayıran DataCamp’in Data Science için Python’a Giriş kursuna göz atmayı düşünün.

Python Numpy Dizisi (Array) Nedir?

Girişte NumPy dizilerinin biraz Python listelerine benzediğini ama aynı zamanda bir hayli farklı olduğunu okudunuz. Konuya yeni olanlar için, tam olarak ne olduğunu ve ne işe yaradığını netleştirelim.

Adından da anlaşılacağı üzere, bir NumPy dizisi numpy kütüphanesinin merkezi veri yapısıdır. Kütüphanenin adı “Numeric Python” veya “Numerical Python”ın kısaltmasıdır.

Başka bir deyişle, NumPy Python’daki bilimsel hesaplamanın çekirdek kütüphanesidir. Bilim ve mühendislikteki problemlerin matematiksel modellerini çözmek için kullanılabilecek araç ve tekniklerin bir koleksiyonunu içerir.

Bu araçlardan biri, diziler ve matrislerin verimli hesaplanması için güçlü bir veri yapısı olan yüksek performanslı çok boyutlu dizi nesnesidir. Bu dizilerle çalışmak için, bu matrisler ve diziler üzerinde çalışan çok sayıda üst düzey matematiksel işlev vardır.

Peki dizi (array) nedir?

Birkaç dizinin çıktısına baktığınızda, aynı türde değerler içeren bir ızgara olarak görebilirsiniz:

import numpy as np
# Define a 1D array
my_array = np.array([[1, 2, 3, 4],
                     [5, 6, 7, 8]],
                    dtype=np.int64)
# Define a 2D array
my_2d_array = np.array([[1, 2, 3, 4],
                        [5, 6, 7, 8]],
                       dtype=np.int64)
# Define a 3D array
my_3d_array = np.array([[[1, 2, 3, 4],
                         [5, 6, 7, 8]],
                        [[1, 2, 3, 4],
                         [9, 10, 11, 12]]],
                       dtype=np.int64)
# Print the 1D array
print("Printing my_array:")
print(my_array)
# Print the 2D array
print("Printing my_2d_array:")
print(my_2d_array)
# Print the 3D array
print("Printing my_3d_array:")
print(my_3d_array)

Yukarıdaki örnekte verilerin tamsayılar olduğunu görüyorsunuz. Dizi, herhangi bir düzenli veriyi yapısal bir biçimde tutar ve temsil eder.

Ancak yapısal düzeyde bir dizinin aslında işaretçilerden ibaret olduğunu bilmelisiniz. Bir bellek adresi, bir veri türü, bir şekil (shape) ve adımlardan (stride) oluşur:

  • Veri işaretçisi, dizideki ilk baytın bellek adresini gösterir.
  • Veri türü veya dtype işaretçisi, dizide yer alan öğelerin türünü açıklar.
  • Shape, dizinin şeklini belirtir.
  • Stride’lar, bir sonraki öğeye gitmek için bellekte atlanması gereken bayt sayısıdır. Stride’larınız (10,1) ise, bir sonraki sütuna geçmek için bir bayt ve bir sonraki satırdaki aynı konuma gitmek için 10 bayt ilerlemeniz gerekir.

Başka bir deyişle, bir dizi ham veri hakkında, bir öğenin nasıl bulunacağı ve nasıl yorumlanacağı hakkında bilgi içerir.

Teori yeter. Bunu kendimiz görelim:

Bunu, numpy dizi özniteliklerini inceleyerek kolayca test edebilirsiniz:

import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print out memory address
print(my_2d_array.data)

# Print out the shape of `my_array`
print(my_2d_array.shape)

# Print out the data type of `my_array`
print(my_2d_array.dtype)

# Print out the stride of `my_array`
print(my_2d_array.strides)

Gördüğünüz gibi artık çok daha fazla bilgi elde ediyorsunuz: örneğin yazdırılan veri türü ‘int64’ yani imzalı 32 bit tamsayı türüdür; Bu çok daha ayrıntılı! Bu aynı zamanda dizinin bellekte 64 bayt olarak saklandığı anlamına gelir (her tamsayı 8 bayt yer kaplar ve 8 tamsayıdan oluşan bir diziniz vardır). Dizinin stride’ları, bir sonraki sütuna geçmek için 8 bayt (bir değer), bir sonraki satırda aynı konuma geçmek için ise 32 bayt (4 değer) atlamanız gerektiğini söyler. Bu nedenle dizinin stride’ları (32,8) olacaktır.

Veri türünü int32 olarak ayarlarsanız, dönen strides demetinin (16, 4) olacağını unutmayın; çünkü yine bir sonraki sütuna geçmek için bir değer ve aynı konuma gitmek için 4 değer hareket etmeniz gerekir. Değişen tek şey, her tamsayının 8 yerine 4 bayt kaplayacak olmasıdır.

Numpy Array Axis

Yukarıda gördüğünüz dizi, adından da anlaşılacağı gibi, iki boyutludur: satırlar ve sütunlar vardır. Satırlar “ekseni 0”, sütunlar ise “ekseni 1” olarak belirtilir. Eksen numarası, boyut sayısıyla birlikte artar: önceki kod parçasında örneğini gördüğünüz 3B dizilerde ek bir “eksen 2” vardır. Bu eksenlerin yalnızca en az 2 boyutlu diziler için geçerli olduğuna dikkat edin; 1B diziler için buna gerek yoktur.

Bu eksenler, NumPy dizilerinizin şeklini manipüle ederken işinize yarayacaktır.

Numpy Nasıl Kurulur

Bu NumPy dizilerini kendiniz denemeye başlamadan önce, önce yerel olarak kurulu olduğundan emin olmalısınız (bilgisayarınızda çalıştığınızı varsayarsak). Python kütüphanesi zaten yüklüyse, bu bölümü atlayabilirsiniz :)

Ortamınızı hâlâ kurmanız gerekiyorsa, bilgisayarınıza NumPy kurmanın iki ana yolu olduğunu bilmelisiniz: Python wheel’ları yardımıyla veya Anaconda Python dağıtımıyla.

Python Wheels ile Kurulum

Öncelikle Python’un kurulu olduğundan emin olun. Bunu hâlâ yapmanız gerekiyorsa Python nasıl kurulur rehberimize göz atabilirsiniz :)

Windows’ta çalışıyorsanız, Python’u PATH ortam değişkenine eklediğinizden emin olun. Ardından, Python’un açık kaynak kütüphanelerini kullanabilmenizi sağlayacak pip gibi bir paket yöneticisi kurmayı unutmayın.

Python 3’ün yeni sürümlerinin pip ile geldiğini unutmayın; bu yüzden pip’iniz olup olmadığını iki kez kontrol edin ve varsa, NumPy’yi kurmadan önce yükseltin:

pip install pip --upgrade
pip --version
Sisteminize uygun NumPy wheel dosyasını PyPI web sitesinden indirin. Kullanılabilir NumPy wheel’larının listesini Python Package Index’te bulabilirsiniz.
 
NumPy wheel dosyasını indirdikten sonra, komut istemi veya terminal penceresini kullanarak dosyanın kayıtlı olduğu dizine gidin.
 
NumPy’yi aşağıdaki komutla kurun; burada "numpy-<version>-<architecture>.whl" ifadesini indirdiğiniz NumPy wheel dosyasının adıyla değiştirin:
pip install numpy-<version>-<architecture>.whl
Örneğin, 64 bit Windows sistemi için NumPy sürüm 1.20.3’ü indirdiyseniz komut şöyle olurdu:
pip install numpy-1.20.3-cp39-cp39-win_amd64.whl
Kurulum tamamlandıktan sonra bir Python yorumlayıcısı açıp aşağıdaki komutu çalıştırarak NumPy’nin kurulu olduğunu doğrulayabilirsiniz:
import numpy
Herhangi bir hata mesajı yoksa NumPy kurulmuş ve kullanıma hazır demektir!

Anaconda Python Dağıtımı ile Kurulum

NumPy edinmek için Anaconda Python dağıtımını da indirebilirsiniz. Bu yöntem kolaydır ve hızlı başlamanızı sağlar! Henüz indirmediyseniz resmi sayfaya giderek edinin. Kurulum talimatlarını izleyin ve hazırsınız!

Neden bunun daha kolay olabileceğini merak ediyor musunuz?

Bu Python dağıtımını edinmenin güzel yanı, veri analizlerinizde kullanacağınız NumPy veya pandas, scikit-learn vb. büyük paketleri ayrıca kurma konusunda fazla endişelenmenize gerek olmamasıdır.

Özellikle Python’a, programlamaya veya terminallere çok yeniyseniz, Anaconda’nın veri bilimi için en popüler 100 Python, R ve Scala paketini zaten içermesi gerçekten rahatlatıcı olabilir. Ancak daha deneyimli veri bilimciler için de veri bilimi problemlerine hızla başlamak istiyorsanız Anaconda doğru yoldur.

Dahası, Anaconda Jupyter ve Spyder gibi çeşitli açık kaynak geliştirme ortamlarını da içerir. Bu eğitimden sonra Jupyter Notebook ile çalışmaya başlamak isterseniz, Jupyter notebook eğitimimize gidin.

Kısacası, NumPy ve veri bilimiyle ilgili diğer paketlerle çalışmaya başlamak için Anaconda’yı indirmeyi düşünün!

NumPy Dizileri Nasıl Oluşturulur

Artık ortamınızı kurduğunuza göre sıra gerçek işe geldi. Kabul edelim, yukarıdaki kodda dizilerle bazı şeyleri zaten denediniz. Ancak önce kendi bilgisayarınıza NumPy’yi yüklemeniz gerektiğinden, onlarla gerçek anlamda uygulamalı çalışma yapmadınız. Bunu yaptığınıza göre, yukarıdaki kod parçalarını kendi başınıza çalıştırmak için neler yapmanız gerektiğini görmenin zamanı geldi.

Bir numpy dizisi oluşturmak için np.array() işlevini kullanabilirsiniz. Tek yapmanız gereken ona bir liste geçirmek; isteğe bağlı olarak verinin veri türünü de belirtebilirsiniz. Seçebileceğiniz olası veri türleri hakkında daha fazla bilgi edinmek isterseniz şu rehbere gidin veya DataCamp’in NumPy kopya kağıdına hızlıca göz atmayı düşünün.

Yeni bir kullanıcıysanız bu NumPy veri türlerini ezberlemenize gerek yoktur; ancak hangi verilerle uğraştığınızı bilmeniz ve önemsemeniz gerekir. Veri türleri, verilerinizin bellekte ve disk üzerinde nasıl saklandığı üzerinde daha fazla kontrol gerektiğinde vardır. Özellikle kapsamlı verilerle çalıştığınız durumlarda depolama türünü kontrol etmeyi bilmeniz iyidir.

np.array() işleviyle çalışmak için, numpy kütüphanesinin ortamınızda mevcut olduğundan emin olmayı unutmayın.

NumPy kütüphanesi bir içe aktarma (import) geleneğini takip eder: bu kütüphaneyi içe aktarırken np olarak içe aktardığınızdan emin olmalısınız. Bunu yaparak, diğer Python kullanıcılarının kodunuzu daha kolay anlamasını sağlarsınız.

Aşağıdaki örnekte, yukarıda üzerinde oynadığınız my_array dizisini oluşturacaksınız:

import numpy as np

# Make the array `my_array`
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print `my_array`
print(my_array)

Listelerin nasıl oluşturulacağı hakkında daha fazla bilgi edinmek isterseniz, Python liste soruları eğitimimize göz atın.

Ancak bazen dizinize hangi verileri koymak istediğinizi bilemezsiniz veya başka bir kaynaktan bir numpy dizisine veri aktarmak isteyebilirsiniz. Bu durumlarda sırasıyla başlangıç yer tutucularından yararlanacak veya metinden dizilere veri yüklemek için işlevler kullanacaksınız.

Aşağıdaki bölümler bunu nasıl yapacağınızı gösterecek.

“Boş” NumPy Dizisi Nasıl Yapılır

İnsanlar “boş” diziler oluşturduklarını söylediklerinde genellikle kastettikleri, sonradan doldurabileceğiniz başlangıç yer tutucularını kullanmaktır. Dizileri 1’lerle veya 0’larla başlatabilirsiniz; ayrıca eşit aralıklı değerlerle, sabit veya rastgele değerlerle doldurulan diziler de oluşturabilirsiniz.

Yine de tamamen boş bir dizi de yapabilirsiniz.

Neyse ki bunun için epey işlev var.

Aşağıda hepsini deneyin!

import numpy as np

# Create an array of ones
ones_array = np.ones((3, 4))
print("Ones Array:")
print(ones_array)
print()

# Create an array of zeros
zeros_array = np.zeros((2, 3, 4), dtype=np.int16)
print("Zeros Array:")
print(zeros_array)
print()

# Create an array with random values
random_array = np.random.random((2, 2))
print("Random Array:")
print(random_array)
print()

# Create an empty array
empty_array = np.empty((3, 2))
print("Empty Array:")
print(empty_array)
print()

# Create a full array
full_array = np.full((2, 2), 7)
print("Full Array:")
print(full_array)
print()

# Create an array of evenly-spaced values
arange_array = np.arange(10, 25, 5)
print("Arange Array:")
print(arange_array)
print()

# Create an array of evenly-spaced values
np.linspace(0,2,9)

İpucu: Yukarıdaki işlevlerle oynayarak nasıl çalıştıklarını anlayın!

  • np.ones(), np.random.random(), np.empty(), np.full() veya np.zeros() gibi bazıları için, 1’lerle veya 0’larla diziler oluşturmak için yapmanız gereken tek şey, oluşturmak istediğiniz dizinin şeklini geçmektir. np.ones() ve np.zeros() için seçenek olarak veri türünü de belirtebilirsiniz. np.full() durumunda, diziye yerleştirmek istediğiniz sabit değeri de belirtmeniz gerekir.
  • np.linspace() ve np.arange() ile eşit aralıklı değerlerden oluşan diziler yapabilirsiniz. Bu iki işlev arasındaki fark, yukarıdaki kod parçasında geçirilen üç değerden sonuncusunun np.linspace() için örnek sayısını, np.arange() için ise adım değerini belirtmesidir. İlkinde, örneğin 0 ile 2 arasında yer alan 9 değerlik bir dizi istersiniz. İkincisinde ise 10’dan başlayan ve 5’er adımlarla oluşturulan değerlerden oluşan bir dizi istersiniz.

NumPy’nin ayrıca np.eye() ve np.identity() ile birim dizi veya matris oluşturmanıza izin verdiğini unutmayın. Birim matris, ana köşegenindeki tüm öğelerin 1, diğer tüm öğelerin 0 olduğu kare bir matristir. Bir matrisi birim matrisle çarptığınızda, verilen matris değişmeden kalır.

Başka bir deyişle, bir matrisi birim matrisle çarparsanız, matris çarpımının standart kurallarına göre ortaya çıkan çarpım yine aynı matris olacaktır.

Bu eğitimin odağı birim matrislerin nasıl çalıştığını göstermek olmasa da, matris hesaplamalarına başladığınızda birim matrislerin yararlı olduğunu söylemek yeterlidir: matematiksel denklemleri basitleştirerek hesaplamalarınızı daha verimli ve sağlam hale getirebilirler.

Metinden NumPy Dizileri Nasıl Yüklenir

Başlangıç yer tutucularından yararlanarak veya bazı örnek verilerle diziler oluşturmak, numpy ile çalışmaya başlamak için harika bir yoldur. Ancak veri analizine başlamak istediğinizde, verileri metin dosyalarından yüklemeniz gerekecektir.

Şimdiye kadar gördüklerinizle çok fazla bir şey yapamazsınız. Dosyalarınızdaki verileri yüklemek için loadtxt() veya genfromtxt() gibi belirli işlevlerden yararlanın.

Diyelim ki aşağıdaki gibi veriler içeren metin dosyalarınız var; aşağıdaki kodda yorum satırlarında yer alan değerleri kopyalayıp bir metin dosyasına yapıştırın ve “data.txt” olarak kaydedin. Ardından aşağıdaki kodu kullanabilirsiniz:

# This is your data in the text file
# Value1  Value2  Value3
# 0.2536  0.1008  0.3857
# 0.4839  0.4536  0.3561
# 0.1292  0.6875  0.5929
# 0.1781  0.3049  0.8928
# 0.6253  0.3486  0.8791

# Import your data
x, y, z = np.loadtxt('data.txt',
                    skiprows=1,
                    unpack=True)

Yukarıdaki kodda verileri ortamınıza yüklemek için loadtxt() kullanırsınız. Her iki işlevin de aldığı ilk argümanın data.txt metin dosyası olduğunu görüyorsunuz. Sonra her biri için bazı belirli argümanlar vardır: ilk ifadede ilk satırı atlar ve sütunları ayrı diziler olarak döndürmek için unpack=TRUE kullanırsınız. Bu, Value1 sütunundaki değerlerin x’e konulacağı anlamına gelir, vb.

Virgülle ayrılmış verileriniz varsa veya veri türünü belirtmek istiyorsanız, loadtxt() argümanlarına ekleyebileceğiniz delimiter ve dtype argümanlarının da olduğunu unutmayın.

Kolay ve anlaşılır, değil mi?

İkinci veri dosyanıza bakalım:

# Your data in the text file
# Value1  Value2  Value3
# 0.4839  0.4536  0.3561
# 0.1292  0.6875  MISSING
# 0.1781  0.3049  0.8928
# MISSING 0.5801  0.2038
# 0.5993  0.4357  0.7410

my_array2 = np.genfromtxt('data2.txt',
                      skip_header=1,
                      filling_values=-999)

Burada verileri yüklemek için genfromtxt()’ye başvurduğunuzu görüyorsunuz. Bu durumda, 'MISSING' dizgileriyle belirtilen bazı eksik değerlerle başa çıkmanız gerekir.

genfromtxt() işlevi, sayısal sütunlardaki karakter dizgilerini nan’a dönüştürdüğünden, filling_values argümanını belirterek bu değerleri başka değerlere çevirebilirsiniz. Bu durumda, bu eksik değerlerin değerini -999 olarak ayarlamayı seçiyorsunuz.

Her ne sebeple olursa olsun, genfromtxt() tarafından nan’a dönüştürülmeyen değerleriniz varsa, verilerinizdeki eksik değerlerin tam olarak ne olduğunu belirtmenize olanak tanıyan missing_values argümanı her zaman vardır.

Ancak hepsi bu değil.

İpucu: Verilerinizi başarıyla içe aktarmak için başka hangi argümanları ekleyebileceğinizi görmek için bu numpy.genfromtxt sayfasına göz atın.

Şimdi bu iki işlev arasındaki gerçek farkın ne olduğunu merak ediyor olabilirsiniz.

Örnekler bunu belki örtük olarak gösterdi; ancak genel olarak genfromtxt() size biraz daha fazla esneklik sağlar; loadtxt()’den daha sağlamdır.

Bu farkı biraz daha pratik hale getirelim: loadtxt(), yalnızca metin dosyasındaki her satır aynı sayıda değer içerdiğinde çalışır; bu nedenle eksik değerleri kolayca ele almak istediğinizde, genellikle genfromtxt() kullanmanın daha kolay olduğunu göreceksiniz.

Ancak bu kesinlikle tek neden değil.

genfromtxt()’nin sunduğu argümanların sayısına kısaca bakmak, içe aktarmada gerçekten belirtilebilecek çok daha fazla şey olduğunu gösterecektir; örneğin okunacak maksimum satır sayısı veya değişkenlerden boşlukları otomatik olarak kırpma seçeneği gibi.

NumPy Dizileri Nasıl Kaydedilir

Dizilerinizle yapmanız gereken her şeyi yaptıktan sonra, onları bir dosyaya da kaydedebilirsiniz. Diziyi bir metin dosyasına kaydetmek istiyorsanız bunu yapmak için savetxt() işlevini kullanabilirsiniz:

import numpy as np
x = np.arange(0.0,5.0,1.0)
np.savetxt('test.out', x, delimiter=',')

np.arange()’ın eşit aralıklı değerlerden oluşan bir NumPy dizisi oluşturduğunu unutmayın. Bu işleve verdiğiniz üçüncü değer adım değeridir.

Elbette NumPy dizilerinizi metin dosyalarına kaydetmenin başka yolları da vardır. Verilerinizi ikili dosyalara veya arşivlere almak istiyorsanız aşağıdaki tablodaki işlevlere göz atın:

save() Bir diziyi NumPy .npy biçiminde ikili bir dosyaya kaydedin
savez() Birden çok diziyi sıkıştırılmamış .npz arşivine kaydedin
savez_compressed() Birden çok diziyi sıkıştırılmış .npz arşivine kaydedin

Yukarıdaki işlevleri verilerinizi kaydetmek için nasıl kullanabileceğiniz hakkında daha fazla bilgi veya örnek için şu NumPy başvuru sayfasına göz atın veya daha hızlı bilgi edinmek için NumPy’nin sunduğu yardım işlevlerinden birini kullanın!

Bu NumPy yardım işlevlerinin ne olduğundan emin değil misiniz?

Merak etmeyin! Bunlar hakkında bir sonraki bölümlerde daha fazla şey öğreneceksiniz!

NumPy Dizilerinizi Nasıl İncelersiniz

Yukarıda bahsedilen data, shape, dtype ve strides gibi dizi özniteliklerine ek olarak, dizileriniz hakkında daha fazla bilgi edinmek için kolayca kullanabileceğiniz başka öznitelikler de vardır. Yeni başlarken kullanışlı bulabileceğiniz bazıları şunlardır:

import numpy as np

# Create a numpy array with shape (2,4) and dtype int64
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print the number of dimensions of `my_array`
print("Number of dimensions of my_array:")
print(my_array.ndim)
print()

# Print the number of elements in `my_array`
print("Number of elements in my_array:")
print(my_array.size)
print()

# Print information about the memory layout of `my_array`
print("Information about the memory layout of my_array:")
print(my_array.flags)
print()

# Print the length of one array element in bytes
print("Length of one array element in bytes:")
print(my_array.itemsize)
print()

# Print the total consumed bytes by `my_array`'s elements
print("Total consumed bytes by my_array's elements:")
print(my_array.nbytes)
print()

Bunlar, bir dizinin sahip olabileceği özniteliklerin neredeyse tamamıdır.

Bu noktada hepsinin sizin için faydalı olmadığını hissediyorsanız endişelenmeyin. Bu oldukça normaldir; çünkü, önceki bölümde okuduğunuz gibi, yalnızca büyük veri kümeleriyle çalışırken bellek konusunda endişelenmeye başlarsınız.

Ayrıca özniteliklerin yanı sıra, diziniz hakkında daha fazla bilgi edinmenin ve hatta onu biraz ayarlamanın başka yolları da olduğunu unutmayın:

import numpy as np
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print the length of `my_array`
print(len(my_array))

# Change the data type of `my_array`
my_array.astype(float)

Artık dizinizi, ya np.array() ile ya da başlangıç yer tutucu işlevlerinden biriyle kendiniz oluşturarak ya da loadtxt() veya genfromtxt() işlevleriyle verilerinizi yükleyerek oluşturduğunuza göre, NumPy kütüphanesini gerçekten tanımlayan ikinci temel unsura daha yakından bakmanın zamanı geldi: bilimsel hesaplama.

NumPy Yayınlama (Broadcasting) Nasıl Çalışır

Bilimsel hesaplamaya daha derine inmeden önce, yayınlamanın tam olarak ne olduğunu gözden geçirmek iyi bir fikir olabilir: bu, aritmetik işlemler gerçekleştirirken NumPy’nin farklı şekillerdeki dizilerle çalışmasına olanak tanıyan bir mekanizmadır.

Aşağıdaki infografik, NumPy yayınlamasının eylem halindeki bir örneğini gösterir: 

NumPy Broadcasting

Kaynak

Daha pratik bir bağlama oturtmak gerekirse, genellikle biraz daha büyük bir dizi ve biraz daha küçük başka bir diziye sahip olursunuz. İdealde, daha büyük dizi üzerinde bir işlem (toplama, çarpma vb.) gerçekleştirmek için daha küçük diziyi birden fazla kez kullanmak istersiniz.

Bunu yapmak için yayınlama mekanizmasını kullanırsınız.

Ancak, bunu kullanmak istiyorsanız bazı kurallar vardır. Endişelenmeden önce, bu “kurallar”ın çok basit ve oldukça anlaşılır olduğunu göreceksiniz!

  • Öncelikle, yayınlamanın başarılı olmasını sağlamak için dizilerinizin boyutlarının uyumlu olması gerekir. İki boyut eşitse uyumludur. Aşağıdaki örneği düşünün:
# Import the NumPy library and give it an alias of `np`
import numpy as np

# Initialize a 3x4 array of ones and assign it to the variable `x`
x = np.ones((3,4))

# Print the shape of the array `x`
print("Shape of x:", x.shape)

# Initialize a 3x4 array of random numbers between 0 and 1 and assign it to the variable `y`
y = np.random.random((3,4))

# Print the shape of the array `y`
print("Shape of y:", y.shape)

# Add the arrays `x` and `y` element-wise and print the resulting array
z = x + y
print("Result of x + y:\n", z)

# Print the shape of the resulting array
print("Shape of x + y:", z.shape)
  • İki boyut, bunlardan biri 1 ise de uyumludur:
# Import the NumPy library and give it an alias of `np`
import numpy as np

# Initialize a 3x4 array of ones and assign it to the variable `x`
x = np.ones((3,4))

# Print the shape of the array `x`
print("Shape of x:", x.shape)

# Initialize a 3x4 array of random numbers between 0 and 1 and assign it to the variable `y`
y = np.random.random((3,4))

# Print the shape of the array `y`
print("Shape of y:", y.shape)

# Add the arrays `x` and `y` element-wise and print the resulting array
z = x + y
print("Result of x + y:\n", z)

# Print the shape of the resulting array
print("Shape of x + y:", z.shape)

Boyutlar uyumlu değilse bir ValueError alacağınızı unutmayın.

İpucu: Hesaplamaları yaptıktan sonra oluşan dizinin boyutunu da test edin! Boyutun, giriş dizilerinin her boyutu boyunca aslında maksimum boyut olduğunu göreceksiniz.

Başka bir deyişle, x-y işleminin sonucu (3,4) şeklinde bir dizi verir: y’nin şekli (4,), x’in şekli ise (3,4) idi. Yeni, ortaya çıkan dizinin şeklini oluşturmak için x ve y’nin her boyutundaki maksimum boyut alınır.

  • Son olarak, diziler ancak tüm boyutlarda uyumluysa birlikte yayınlanabilir. Aşağıdaki örneği düşünün:
# Import `numpy` as `np`
import numpy as np

# Initialize `x` and `y`
x = np.ones((3,4))
y = np.random.random((5,1,4))

# Add `x` and `y`
z = x + y

x ve y’nin boyutları biraz farklı görünmesine rağmen, ikisinin de toplanabildiğini görüyorsunuz.

Bunun nedeni tüm boyutlarda uyumlu olmalarıdır:

  • x dizisi 3 X 4 boyutundadır,
  • y dizisi 5 X 1 X 4 boyutundadır

Yukarıda da gördüğünüz gibi, boyutlardan biri 1’e eşitse boyutlar uyumludur; bu nedenle bu iki dizi yayınlama için gerçekten iyi bir adaydır!

Fark edeceğiniz şey, y’nin boyutunun 1 olduğu ve diğer dizinin boyutunun 1’den büyük olduğu boyutta (yani 3), ilk dizinin sanki o boyut boyunca kopyalanmış gibi davranacağıdır.

Ortaya çıkan dizinin şeklini yine x ve y’nin her boyutundaki maksimum boyutun belirleyeceğini unutmayın: sonucun boyutu (5,3,4) olacaktır

Kısacası, yayınlamadan yararlanmak istiyorsanız, çalıştığınız dizilerin şekil ve boyutlarına çokça güveneceksiniz.

Peki ya boyutlar uyumlu değilse?

Eşit değillerse veya bunlardan biri 1’e eşit değilse ne olur?

Bunu dizinizi manipüle ederek düzeltmeniz gerekecek! Bunu nasıl yapacağınızı bir sonraki bölümlerde göreceksiniz.

Dizi Matematiği Nasıl Çalışır?

Yayınlamanın aritmetik işlemler yaparken kullanışlı olduğunu gördünüz. Bu bölümde, dizilerle matematik yapmak için kullanabileceğiniz bazı işlevleri keşfedeceksiniz.

Dolayısıyla muhtemelen sizi şaşırtmayacaktır: iki (veya daha fazla) dizi üzerinde toplama, çıkarma, çarpma, bölme veya kalanını hesaplamak için sırasıyla +, -, *, / veya % kullanabilirsiniz. Ancak NumPy’nin bu kadar kullanışlı olmasının büyük bir kısmı, bunları yapmak için işlevlere de sahip olmasıdır. Az önce gördüğünüz işlemlerin eşdeğer işlevleri sırasıyla np.add(), np.subtract(), np.multiply(), np.divide() ve np.remainder()’dır.

Ayrıca np.exp() ve np.sqrt() ile üs alma ve karekök alma işlemlerini kolayca yapabilir, np.sin() ve np.cos() ile dizinizin sinüs veya kosinüslerini hesaplayabilirsiniz. Son olarak, np.log() ile doğal logaritmayı hesaplayabileceğinizi veya dizinize dot() uygulayarak noktasal çarpımı hesaplayabileceğinizi de belirtmek faydalı olur.

Aşağıdaki kodda hepsini deneyin.

Küçük bir ipucu: Bu alıştırma için yüklenmiş dizilere önce göz atmayı unutmayın!

# Import `numpy` as `np`
import numpy as np
x = np.array([[1, 2, 3], [3, 4, 5]])
y = np.array([6,7,8])

# Add `x` and `y`
z = np.add(x,y)
print("Addition of x and y:\n", z)

# Subtract `x` and `y`
z = np.subtract(x,y)
print("Subtraction of y from x:\n", z)

# Multiply `x` and `y`
z = np.multiply(x,y)
print("Element-wise multiplication of x and y:\n", z)

Yayınlamanın nasıl çalıştığını hatırlıyor musunuz? IPython kabuğunuzda hem x’in hem de y’nin boyut ve şekillerine bakın. Yayınlama kurallarına uyuluyor mu?

Ancak daha fazlası var.

Aşağıdaki küçük toplulaştırma işlevleri listesine göz atın:

a.sum() Dizi genelinde toplam
a.min() Dizi genelinde minimum değer
b.max(axis=0) Bir dizi satırının maksimum değeri
b.cumsum(axis=1) Öğelerin kümülatif toplamı
a.mean() Ortalama
b.median() Medyan
a.corrcoef() Korelasyon katsayısı
np.std(b) Standart sapma

Tüm bu işlevlerin yanı sıra, dizi öğelerini karşılaştırmanıza olanak tanıyan mekanizmalar olduğunu bilmek de faydalı olabilir. Örneğin, iki dizinin öğelerinin aynı olup olmadığını kontrol etmek istiyorsanız == operatörünü kullanabilirsiniz. Dizi öğelerinin daha küçük veya daha büyük olup olmadığını kontrol etmek için ise < veya > operatörlerini kullanırsınız.

Tüm bunlar oldukça basit görünüyor, değil mi?

Ancak, tüm dizileri birbirleriyle de karşılaştırabilirsiniz! Bu durumda np.array_equal() işlevini kullanırsınız. Birbiriyle karşılaştırmak istediğiniz iki diziyi geçmeniz yeterlidir.

Karşılaştırmanın yanı sıra, dizileriniz üzerinde mantıksal işlemler de gerçekleştirebileceğinizi unutmayın. np.logical_or(), np.logical_not() ve np.logical_and() ile başlayabilirsiniz. Bu, temel OR, NOT ve AND mantıksal işlemleriniz gibi çalışır;

En basit örnekte, öğelerinizin aynı olup olmadığını (örneğin, 1) veya iki dizi öğesinden birinin 1 olup olmadığını görmek için OR kullanırsınız. Her ikisi de 0 ise FALSE döndürürsünüz. AND’i, ikinci öğenizin de 1 olup olmadığını görmek için; NOT’u ise ikinci öğenin 1’den farklı olup olmadığını görmek için kullanırdınız.

Aşağıdaki kod parçasında bunu test edin:

# Import `numpy` as `np`
import numpy as np
# Initialize arrays
a = np.array([1, 1, 0, 0], dtype=bool)
b = np.array([1, 0, 1, 0], dtype=bool)

# `a` AND `b` 
np.logical_and(a, b)

# `a` OR `b`
np.logical_or(a, b)

# `a` NOT `b`
np.logical_not(a,b)

Diziler Nasıl Alt Küme, Dilimleme ve İndekslenir

Matematiksel işlemlerin yanı sıra, orijinal dizinin (veya ortaya çıkan dizinin) yalnızca bir kısmını veya daha ileri analizlerde ya da diğer işlemlerde kullanmak üzere yalnızca bazı dizi öğelerini almayı da düşünebilirsiniz. Bu durumda dizilerinizi alt kümeye ayırmanız, dilimlemeniz ve/veya indekslemeniz gerekecektir.

Bu işlemler, Python listelerinde gerçekleştirdiklerinize oldukça benzerdir. Benzerlikleri kendiniz kontrol etmek veya daha ayrıntılı bir açıklama istiyorsanız, DataCamp’in Python liste eğitimine göz atmayı düşünebilirsiniz.

Bu işlemlerin nasıl çalıştığı hakkında hiçbir fikriniz yoksa, şimdilik şu iki temel şeyi bilmeniz yeterlidir:

  • İndeks operatörü olarak köşeli parantezleri [] kullanırsınız ve
  • Genellikle bu köşeli parantezlere tamsayılar geçirirsiniz, ancak seçmek istediğiniz öğeleri/satırları/sütunları belirtmek için iki nokta üst üste : veya bunun tamsayılarla bir kombinasyonunu da koyabilirsiniz.

Alt Kümeleme

Bu iki noktanın dışında, tüm bunların nasıl bir araya geldiğini görmenin en kolay yolu, alt kümelemeye ilişkin bazı örneklere bakmaktır:

import numpy as np

# Initialize 1D array
my_array = np.array([1,2,3,4])

# Print subsets
print(my_array[1])
import numpy as np

# Initialize 2D array
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print subsets
print(my_2d_array[1][2])
print(my_2d_array[1,2])
import numpy as np

# Initialize 3D array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Print subset
print(my_3d_array[1,1,2])

Dilimleme

İsterseniz alt kümelemeden biraz daha gelişmiş bir şey de dilimlemedir. Burada yalnızca dizilerinizin belirli değerlerini dikkate almakla kalmaz, satır ve sütun düzeyine inersiniz. Temelde “konumlar” yerine “bölgelerle” çalışmış olursunuz.

Bu benzetmeden ne kastedildiğini şu kod örneklerinde görebilirsiniz:

import numpy as np

# Initialize 1D array
my_array = np.array([1,2,3,4])

# Print subsets
print(my_array[0:2])
import numpy as np

# Initialize 2D array
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print subsets
print(my_2d_array[0:2,1])
import numpy as np

# Initialize 3D array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Print subset
print(my_3d_array[1,...])

Özünde aşağıdakinin geçerli olduğunu göreceksiniz:

a[start:end] # items start through the end (but the end is not included!)
a[start:]    # items start through the rest of the array
a[:end]      # items from the beginning through the end (but the end is not included!)

Yukarıdaki kodda her dizi ayrı ayrı başlatılır ve alt kümeler ayrı kod bloklarında yazdırılır. my_array, my_2d_array ve my_3d_array sırasıyla 1B, 2B ve 3B dizilerdir ve alt kümeler indeksleme gösterimi kullanılarak yazdırılır.

İlk örnekte, my_array’ın 0 ve 1. indekslerindeki öğeleri seçmek için dilimleme kullanıyoruz. İkinci örnekte, my_2d_array’ın 0 ve 1. satır, 1. sütunundaki öğeleri seçmek için dilimleme kullanıyoruz. Üçüncü örnekte ise, my_3d_array’ın birinci ve ikinci boyutları boyunca tüm öğeleri, üçüncü boyut boyunca ise ikinci öğeyi seçmek için ... gösterimini kullanıyoruz.

İndeksleme

Son olarak indeksleme de vardır. NumPy söz konusu olduğunda, boolean indeksleme ve gelişmiş veya “süslü” (fancy) indeksleme bulunur.

(Merak ediyorsanız, bu gerçek NumPy jargonu; sonuncuyu ben uydurmadım!)

Önce boolean indeksleme. Burada, indeks numarasına göre öğeleri, satırları veya sütunları seçmek yerine, dizinizden belirli bir koşulu sağlayan değerleri seçersiniz.

Bunu koda dökmek oldukça kolay olabilir:

import numpy as np
my_array = np.array([1,2,3,4])
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Try out a simple example
print(my_array[my_array<2])

# Specify a condition
bigger_than_3 = (my_3d_array >= 3)

# Use the condition to index our 3d array
print(my_3d_array[bigger_than_3])

Bir koşul belirtmek için | (OR) ve & (AND) mantıksal operatörlerinden de yararlanabileceğinizi unutmayın. Yukarıdaki koşulu bu şekilde yeniden yazmak isterseniz (verimsiz olurdu ama burada eğitim amaçlı gösteriyorum :)), bigger_than_3 = (my_3d_array > 3) | (my_3d_array == 3) elde edersiniz.

Yüklenmiş dizilerle çok fazla olasılık yoktur; ancak örneğin isimler veya başkentler içeren dizilerle olasılıklar sonsuz olabilir!

Gelişmiş indeksleme söz konusu olduğunda, temelde yaptığınız şudur: Orijinal diziden seçmek istediğiniz satırların alt kümesinin sırasını belirtmek için bir liste veya tamsayı dizisi geçirirsiniz.

Bu size biraz soyut mu geldi?

Endişelenmeyin, aşağıdaki kod parçasında deneyin:

import numpy as np
my_array = np.array([1,2,3,4])
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Select elements at (1,0), (0,1), (1,2) and (0,0)
print(my_2d_array[[1, 0, 1, 0],[0, 1, 2, 0]])

# Select a subset of the rows and columns
print(my_2d_array[[1, 0, 1, 0]][:,[0,1,2,0]])

İkinci ifade ilk bakışta size daha az anlamlı gelebilir. Bu normal. Aşağıdaki gibi parçalara ayırırsanız daha anlamlı olabilir:

    • Sadece my_2d_array[[1,0,1,0]] çalıştırırsanız sonuç şöyledir:
array([[5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4]])
    • İkinci kısım yani [:,[0,1,2,0]] ise, bu sonucun tüm satırlarını korumak istediğinizi, ancak sütunların sırasını biraz değiştirmek istediğinizi söyler. 0, 1 ve 2. sütunları şu anki halleriyle göstermek istiyor, ancak 3 numaralı sütunu göstermek yerine 0 numaralı sütunu son sütun olarak tekrarlamak istiyorsunuz. Bu da size aşağıdaki sonucu verir:
array([[5, 6, 7, 5],
   [1, 2, 3, 1],
   [5, 6, 7, 5],
   [1, 2, 3, 1]])

Gelişmiş indeksleme sizin için artık sır değil!

Nasıl Yardım İstenir

Kısa bir ara bilgi olarak, özellikle NumPy ile ilk çalışmaya başladığınızda oldukça kapsamlı olabileceğinden, üzerinde çalıştığınız modüller, işlevler veya sınıflar hakkında her zaman daha fazla bilgi isteyebileceğinizi bilmelisiniz.

Yardım istemek oldukça kolaydır.

Sizi yönlendirmek için numpy’in sunduğu belirli yardım işlevlerinden yararlanırsınız:

  • Docstring’lerde anahtar sözcük araması yapmak için lookfor() kullanın. Bu, özellikle yeni başlarken kullanışlıdır; çünkü işin arkasındaki ‘teori’ hafızanızda solabilir. Dezavantajı, sorgunuz çok spesifik değilse tüm arama sonuçlarından geçmek zorunda kalmanızdır; aşağıdaki kod örneğinde olduğu gibi. Bu da genel görünümü sizin için daha da zorlaştırabilir.
  • İşlevlerin, sınıfların veya modüllerin hızlı açıklamaları ve kod örnekleri için info() kullanın. Yaparak öğrenen biriyseniz, bu yol size göredir! Bu işlevi kullanmanın tek dezavantajı muhtemelen belirli özniteliklerin veya işlevlerin hangi modülde bulunduğunu bilmeniz gerektiğidir. Bununla ne kastedildiğini hemen bilmiyorsanız, aşağıdaki kod örneğine bakın.

Gördüğünüz gibi her iki işlevin de avantajları ve dezavantajları vardır; ancak neden her ikisinin de faydalı olduğunu kendiniz göreceksiniz: Aşağıdaki kod parçasında kendiniz deneyin!

import numpy as np

# Look up info on `mean` with `np.lookfor()` 
print(np.lookfor("mean"))
# Get info on data types with `np.info()`
np.info(np.ndarray.dtype)

dtype’ın ndarray’in bir özniteliği olduğunu gerçekten bilmeniz gerektiğini unutmayın. Ayrıca, bilgi istediğiniz modüllerin, sınıfların veya terimlerin önüne np koymayı unutmayın; aksi takdirde şu şekilde bir hata mesajı alırsınız:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ndarray' is not defined

Artık nasıl yardım isteyeceğinizi biliyorsunuz; bu iyi bir şey. Bu NumPy eğitiminin bir sonraki konusu dizi manipülasyonudur.

Bunu kendi başınıza aşamayacağınızdan değil, tam tersine!

Ancak bazı işlevler sorular doğurabilir; çünkü yeniden boyutlandırma (resize) ile yeniden şekillendirme (reshape) arasındaki fark nedir?

Ve dizilerinizi yatay ve dikey olarak yığmak (stack) arasındaki fark nedir?

Bir sonraki bölüm bu soruları yanıtlamakla ilgilidir; ancak herhangi bir şüpheniz olursa, hızlıca hız kazanmak için az önce gördüğünüz yardım işlevlerini kullanmaktan çekinmeyin.

Diziler Nasıl Manipüle Edilir

Dizileriniz üzerinde matematiksel işlemler gerçekleştirmek yaptığınız şeylerden biridir; ancak muhtemelen en önemlisi, bunu ve yayınlamayı (broadcasting) çalışır kılmak için dizilerinizi nasıl manipüle edeceğinizi bilmektir.

Aşağıda en yaygın yapacağınız manipülasyonlardan bazıları bulunmaktadır.

Dizilerinizi Nasıl Transpoze Edersiniz

Dizilerinizi transpoze etmek aslında onun boyutlarını permütasyonlamaktır. Başka bir deyişle, dizinin şeklini değiştirirsiniz. Transpozisyonun etkisini göstermek için küçük bir örnek alalım:

import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print `my_2d_array`
print(my_2d_array)

# Transpose `my_2d_array`
print(np.transpose(my_2d_array))

# Or use `T` to transpose `my_2d_array`
print(my_2d_array.T)

İpucu: Dizi ile onun transpoze edilmiş sürümünün görsel karşılaştırması tam olarak net değilse, boyutların neden permütasyonlandığını anlamak için her iki dizinin şeklini inceleyin.

İki transpoze işlevi olduğunu unutmayın. Her ikisi de aynı şeyi yapar; aralarında çok fazla fark yoktur. T’nin daha çok bir kolaylık işlevi olduğunu, np.transpose() ile ise çok daha fazla esnekliğe sahip olduğunuzu hesaba katmanız gerekir. Daha fazla argüman kullanmak istiyorsanız bu işlevi kullanmanız önerilir.

Bir boyuttan büyük dizileri transpoze ederken her şey yolundadır; ama yalnızca 1B bir diziniz olduğunda ne olur? Sizce bir etkisi olur mu?

Kendiniz deneyin. 1B diziniz zaten yüklendi:

import numpy as np
my_array = np.array([1,2,3,4])

# Print `my_2d_array
print(my_array)

# Transpose `my_2d_array
print(np.transpose(my_array))

# Or use `T` to transpose `my_2d_array
print(my_array.T)

Tamamen haklısınız! 1B bir diziyi transpoze ettiğinizde hiçbir etki yoktur!

Dizilerinizi Yeniden Şekillendirme (Reshape) ve Yeniden Boyutlandırma (Resize)

Yayınlama bölümünde, aritmetik işlemler için iyi aday olmalarını istiyorsanız dizilerinizin boyutlarının uyumlu olması gerektiğini okumuş olabilirsiniz. Ancak bu böyle olmadığında ne yapmanız gerektiği sorusu henüz yanıtlanmamıştı.

İşte yanıt burada!

Diziler aynı boyutlarda değilse yapabileceğiniz şey, dizinizi yeniden boyutlandırmaktır (resize). O zaman np.resize() işlevine verdiğiniz şekle sahip yeni bir dizi döner. Orijinal dizinizi yeni boyutlarla birlikte geçirirseniz ve bu yeni dizi, orijinalinizden daha büyükse, yeni dizi, ihtiyaç duyulduğu kadar tekrarlanan orijinal dizinin kopyalarıyla doldurulur.

Ancak, yalnızca np.resize()’ı diziye uygular ve ona yeni şekli verirseniz, yeni dizi sıfırlarla doldurulur.

Bir örnekle bunu deneyelim:

import numpy as np
x = np.ones((3,4))

# Print the shape of `x`
print(x.shape)

# Resize `x` to ((6,4))
np.resize(x, (6,4))

# Try out this as well
x.resize((6,4))

# Print out `x`
print(x)

Yeniden boyutlandırmanın (resize) yanı sıra, dizinizi yeniden şekillendirebilirsiniz (reshape). Bu, verilerini değiştirmeden bir diziye yeni bir şekil vermeniz anlamına gelir. Yeniden şekillendirmenin anahtarı, yeni dizinin toplam boyutunun değişmeden kalmasını sağlamaktır. Yukarıda kullanılan x dizisi örneğini ele alırsanız, boyutu 3 X 4 yani 12’dir; yeni dizinin boyutunun da 12 olduğundan emin olmanız gerekir.

Psst… Bir dizinin boyutunu kodla hesaplamak isterseniz size özniteliğini kullanın: x.size veya x.reshape((2,6)).size:

import numpy as np

# Initialize array with shape (3,4) containing all ones
x = np.ones((3,4))

# Print the shape of `x`
print("Shape of x:", x.shape)

# Resize `x` to ((6,4))
np.resize(x, (6,4))

# Try out this as well
x.resize((6,4))

# Print out `x` before and after resizing
print("Array before transposing:\n", x)
print("Shape of array before transposing:", x.shape)

# Transpose `x`
x = x.T

# Print out `x` after transposing
print("Array after transposing:\n", x)
print("Shape of array after transposing:", x.shape)

Çıktı: 

Shape of x: (3, 4)
Array before transposing:
 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
Shape of array before transposing: (6, 4)
Array after transposing:
 [[1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]]
Shape of array after transposing: (4, 6)

Hepsi başarısız olursa, boyutlarınızın hesaplamalarda kullanmak istediğiniz diğer diziyle uyumlu olduğundan emin olmak için orijinal dizinize bir dizi ekleyebilir veya dizi öğeleri ekleyip silebilirsiniz.

Dizilerin şeklini değiştirirken elinizin altında bulundurabileceğiniz bir diğer işlem ravel()’dır. Bu işlev, dizilerinizi düzleştirmenize olanak tanır. Bu, 2B, 3B veya nB dizileriniz olduğunda hepsini 1B bir diziye düzleştirmek için bu işlevi kullanabileceğiniz anlamına gelir.

Epey kullanışlı, değil mi?

Diziler Nasıl Eklenir (Append)

Dizileri orijinal dizinize eklediğinizde, orijinal dizinin sonuna “yapıştırılırlar”. Eklediklerinizin dizinin sonunda olmasını istemiyorsanız, eklemeyi (insert) düşünebilirsiniz. Daha fazla bilgi için bir sonraki bölüme gidin.

NumPy kütüphanesi sayesinde ekleme yapmak oldukça kolaydır; sadece np.append()’i kullanabilirsiniz.

Aşağıdaki kod parçasında nasıl yapıldığını kontrol edin. IPython kabuğunda örneğin my_array yazarak ve ENTER’a basarak hangi dizilerin yüklü olduğunu her zaman kontrol edebileceğinizi unutmayın.

import numpy as np

my_array = np.array([1,2,3,4])

# Print `my_array` before appending
print("my_array before appending:", my_array)

# Append a 1D array to `my_array`
new_array = np.append(my_array, [7, 8, 9, 10])

# Print `new_array`
print("new_array:", new_array)

# Print `my_array` after appending
print("my_array after appending:", my_array)

Çıktı:

my_array before appending: [1 2 3 4]
new_array: [ 1  2  3  4  7  8  9 10]
my_array after appending: [1 2 3 4]

np.append() yerinde (in-place) olarak orijinal diziyi değiştirmek yerine yeni bir dizi döndürdüğü için, eklemeden sonra my_array’in değişmeden kaldığına dikkat edin.

my_2d_array’e ekleme:

import numpy as np

my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Print `my_2d_array` before appending
print("my_2d_array before appending:\n", my_2d_array)

# Append an extra column to `my_2d_array`
new_2d_array = np.append(my_2d_array, [[7], [8]], axis=1)

# Print `new_2d_array`
print("new_2d_array:\n", new_2d_array)

# Print `my_2d_array` after appending
print("my_2d_array after appending:\n", my_2d_array)

Çıktı: 

my_2d_array before appending:
 [[1 2 3 4]
  [5 6 7 8]]
new_2d_array:
 [[1 2 3 4 7]
  [5 6 7 8 8]]
my_2d_array after appending:
 [[1 2 3 4]
  [5 6 7 8]]


my_2d_array’e ekstra bir sütun eklediğinizde eksenin belirtildiğine dikkat edin. 2B dizilerde eksen 1 sütunları, eksen 0 ise satırları belirtir.

Dizi Öğeleri Nasıl Eklenir (Insert) ve Silinir (Delete)

Eklemeye ek olarak, dizi öğeleri ekleyip silebilirsiniz. Muhtemelen artık tahmin ettiğiniz gibi, bu işlemleri yapmanızı sağlayacak işlevler np.insert() ve np.delete()’tir:

import numpy as np
my_array = np.array([1,2,3,4])
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Insert `5` at index 1
np.insert(my_array, 1, 5)

# Delete the value at index 1
np.delete(my_array,[1])

Diziler Nasıl Birleştirilir (Join) ve Bölünür (Split)

Dizilerinizi ‘birleştirebilir’ veya ekleyebilirsiniz. Bu amaçla kullanabileceğiniz bir dizi işlev vardır ve çoğu aşağıda listelenmiştir.

Bunları deneyin, ancak IPython kabuğunda dizilerin şeklini de test ettiğinizden emin olun. Yüklenen diziler x, my_array, my_resized_array ve my_2d_array’dir.

import numpy as np 
x = np.ones((4,))
my_array = np.array([1,2,3,4])
my_resized_array=np.resize(my_array,(2,4))
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Concatentate `my_array` and `x`
print(np.concatenate((my_array,x)))

# Stack arrays row-wise
print(np.vstack((my_array, my_2d_array)))

# Stack arrays row-wise
print(np.r_[my_resized_array, my_2d_array])

# Stack arrays horizontally
print(np.hstack((my_resized_array, my_2d_array)))

# Stack arrays column-wise
print(np.column_stack((my_resized_array, my_2d_array)))

# Stack arrays column-wise
print(np.c_[my_resized_array, my_2d_array])

İşlevleri incelerken birkaç şey fark edeceksiniz:

  • İki diziyi np.concatenate() ile birleştirmek istiyorsanız boyut sayısının aynı olması gerekir. Dolayısıyla 1B olan my_array ile birleştirmek istiyorsanız, ikinci dizinizin de 1B olduğundan emin olmalısınız.
  • np.vstack() ile my_array’i my_2d_array ile zahmetsizce birleştirirsiniz. Dizileri satır bazında yığdığınız için her iki dizideki sütun sayısının aynı olduğundan emin olmanız yeterlidir. Bu nedenle, sütun sayısı eşleştiği sürece my_2d_array’e (2,4) veya (3,4) şekline sahip bir dizi de ekleyebilirsiniz. Başka bir ifadeyle, diziler ilk eksen dışındaki tüm eksenlerde aynı şekle sahip olmalıdır. Bu, np.r[] kullanmak istediğinizde de geçerlidir.
  • np.hstack() için boyut sayısının aynı olmasını ve her iki dizideki satır sayısının da aynı olmasını sağlamanız gerekir. Bu, şekli (2,4) olan my_2d_array’e (2,3) veya (2,4) gibi dizileri yığabileceğiniz anlamına gelir. Satır sayısı eşleştiği sürece her şey mümkündür. Bu işlev NumPy tarafından hâlâ desteklenmektedir; ancak np.concatenate() veya np.stack() tercih edilmelidir.
  • np.column_stack() ile girdiğiniz dizilerin ilk boyutunun aynı olduğundan emin olmanız gerekir. Bu durumda her iki şekil de aynıdır; ancak my_resized_array (2,1) veya (2,) olsaydı da diziler yine yığılırdı.
  • np.c_[] başka bir birleştirme yoludur. Burada da her iki dizinin ilk boyutunun eşleşmesi gerekir.

Dizileri birleştirdiğinizde, bir noktada onları bölmek de isteyebilirsiniz. Tıpkı yatay olarak yığabildiğiniz gibi, aynı şeyi dikey olarak da yapabilirsiniz. Sırasıyla np.hsplit() ve np.vsplit() kullanırsınız:

import numpy as np
my_array = np.array([1,2,3,4])
my_resized_array=np.resize(my_array,(2,4))
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
my_stacked_array = np.hstack((my_resized_array, my_2d_array))

# Split `my_stacked_array` horizontally at the 2nd index
print(np.hsplit(my_stacked_array, 2))

# Split `my_stacked_array` vertically at the 2nd index
print(np.vsplit(my_stacked_array, 2))

Her iki bölme işlevini kullanırken aklınızda tutmanız gereken muhtemelen dizinizin şeklidir. Yukarıdaki durumu örnek alalım: my_stacked_array’in şekli (2,8)’dir. Bölmenin gerçekleşmesini istediğiniz indeksi seçmek istiyorsanız şekli aklınızda tutmalısınız.

NumPy Dizileri Nasıl Görselleştirilir

Son olarak, kesinlikle işinize yarayacak bir şey de dizilerinizi nasıl çizebileceğinizi bilmektir. Bu, özellikle veri keşfinde faydalı olabilir; ancak veri bilimi iş akışının daha sonraki aşamalarında, dizilerinizi görselleştirmek istediğinizde de geçerlidir.

np.histogram() ile

İşlevin çağrıştırabileceğinin aksine, np.histogram() işlevi histogramı çizmez; ancak dizinin her bir bölmeye (bin) düşen oluşumlarını hesaplar; Bu, histogramınızdaki her çubuğun kaplayacağı alanı belirleyecektir.

np.histogram() işlevine önce girdi verilerini veya üzerinde çalıştığınız diziyi geçirirsiniz. Histogram hesaplanırken dizi düzleştirilir.

# Import `numpy` as `np`
import numpy as np

# Initialize your array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Pass the array to `np.histogram()`
print(np.histogram(my_3d_array))

# Specify the number of bins
print(np.histogram(my_3d_array, bins=range(0,13)))

Sonuç olarak histogramın hesaplanacağını göreceksiniz: İlk dizi, dizinizdeki tüm öğelerin frekanslarını listeler; ikinci dizi ise herhangi bir bin belirtmezseniz kullanılacak bin’leri listeler.

Bir bin sayısı belirtirseniz, hesaplamanın sonucu farklı olacaktır: kayan noktalar (float) kaybolacak ve bin’ler için tüm tamsayıları göreceksiniz.

Hesaplanan histogramı etkileyebilecek, belirtebileceğiniz başka argümanlar da vardır. Hepsini burada bulabilirsiniz.

Peki, görselleştiremeyecekseniz böyle bir histogramı hesaplamanın anlamı nedir?

Görselleştirme, Matplotlib’in yardımıyla çocuk oyuncağıdır; ancak histogramı hesaplamak için np.histogram()’a ihtiyacınız yoktur. plt.hist(), (düzleştirilmiş) verileri ve bin’leri geçirdiğinizde bunu kendisi yapar:

# Import numpy and matplotlib
import numpy as np
import matplotlib.pyplot as plt

# Construct the histogram with a flattened 3d array and a range of bins
plt.hist(my_3d_array.ravel(), bins=range(0,13))

# Add a title to the plot
plt.title('Frequency of My 3D Array Elements')

# Show the plot
plt.show()

Yukarıdaki kod size aşağıdaki (temel) histogramı verir:

Numpy Array Histogram

np.meshgrid() Kullanımı

Dizilerinizi (dolaylı olarak) görselleştirmenin bir başka yolu da np.meshgrid() kullanmaktır. Dizilerle ilgili karşılaştığınız sorun, x ve y koordinat değerlerinin 2B dizilerine ihtiyaç duymasıdır. Yukarıdaki işlevle, x değerlerinden oluşan bir dizi ve y değerlerinden oluşan bir diziden dikdörtgen bir ızgara oluşturabilirsiniz: np.meshgrid() işlevi iki 1B dizi alır ve iki dizi içindeki tüm (x, y) çiftlerine karşılık gelen iki 2B matris üretir. Daha sonra bu matrisleri her türlü grafiği oluşturmak için kullanabilirsiniz.

np.meshgrid(), özellikle aşağıdaki kodun gösterdiği gibi, bir ızgara üzerinde işlevleri değerlendirmek istiyorsanız kullanışlıdır:

# Import NumPy and Matplotlib
import numpy as np
import matplotlib.pyplot as plt

# Create an array
points = np.arange(-5, 5, 0.01)

# Make a meshgrid
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs ** 2 + ys ** 2)

# Display the image on the axes
plt.imshow(z, cmap=plt.cm.gray)

# Draw a color bar
plt.colorbar()

# Show the plot
plt.show()

Yukarıdaki kod şu sonucu verir:

Numpy Meshgrid

NumPy ile Veri Analizinin Ötesi

Tebrikler, NumPy eğitiminin sonuna geldiniz!

Oldukça geniş bir alanı kapsadınız; şimdi edindiğiniz bilgiyi koruduğunuzdan emin olmalısınız. Bunu desteklemek için DataCamp’in NumPy kopya kağıdının bir kopyasını almayı unutmayın!

Tüm bu teoriden sonra, bu eğitimde öğrendiğiniz kavramlar ve tekniklerle daha fazla pratik yapmanın zamanı geldi. Bunu yapmanın bir yolu, scikit-learn eğitimine geri dönmek ve makine öğrenimi modelleri oluşturmak için kullanılan veri dizileriyle daha fazla denemeler yapmaktır.

Bu size göre değilse, Anaconda’yı indirip indirmediğinizi tekrar kontrol edin. Ardından, bu Jupyter Notebook’a Kesin Kılavuz ile Jupyter’de NumPy dizileriyle çalışmaya başlayın. Ayrıca, NumPy ve diğer bazı kütüphanelerle Python’da veri analizini Jupyter Notebook’un interaktif veri bilimi ortamında anlatan bu Jupyter Notebook’u da mutlaka inceleyin.

Son olarak, veri manipülasyonu ve görselleştirme üzerine DataCamp kurslarına göz atmayı düşünün. Özellikle Continuum Analytics ile iş birliğimizdeki en yeni kurslarımız kesinlikle ilginizi çekecektir! Pandas ile DataFrame’leri Manipüle Etme veya Pandas Temelleri kurslarına bir göz atın.

Konular
Python
Veri Bilimi
Veri Analizi

Python hakkında daha fazla bilgi edinin

Kurs

NumPy’ye Giriş

4 sa
62.6K
NYC'nin ağaç sayımını kullanarak dizileri oluşturmayı, sıralamayı, filtrelemeyi ve güncellemeyi öğrenerek NumPy becerilerinizi geliştirin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör