Python NumPy Kullanımı, Sayısal Matrisler ve Yapay Zeka Mimarisine İlk Adım

30.01.2025
31
Python NumPy Kullanımı, Sayısal Matrisler ve Yapay Zeka Mimarisine İlk Adım

“Python NumPy ile Yapay Zeka Tasarımı” başlığı çok iddialı oldu sanırım. Aslında “NumPy ile Yapay Zeka Tasarımına Giriş” daha anlamlı bir başlık olurdu. Öyle yada böyle bir yerden başlamak lazım AI tasarımına.

Python ile çalışırken büyük verilerin ayrıştırılmasında (bigdata), görüntü işleme ve hatta yapay zeka mimarisine kadar bir çok alanda matematiksel matrislerin kullanıldığına şahit oluyoruz. Python’da sayı matrislerini işleyen bir çok kütüphane ve sınıf bulunuyor. Bunlardan en çok kullanılanı şüphesiz NumPy kütüphanesidir. Python NumPy kütüphanesi ile neler yapabileceğimize dair bir giriş yapalım.

NumPy Kütüphanesi BootCamp Projesinin GitHub Bağlantısı:
https://github.com/omersahintr/BootCampEdu/tree/main/NumPy

NumPy Kütüphanesi Kurulumu

Python NumPy ile çalışabilmek için öncelikle kurulumunu gerçekleştirmemiz gerekir. Kurulum işleminden sonra import ederek kod satırında NumPy kütüphanesinden yararlanabiliriz.

Terminal ekranına geçelim ve aşağıdaki komut satırını yazarak NumPy modülünü yükleyelim:

  • pip install numpy (Python çekirdek platformu için)
  • conda install numpy (Anaconda platformu için)
python numpy

NumPy Dökümantasyonu: https://numpy.org/doc/stable/

NumPy kütüphanesini diğer kütüphaneler içerisinde de bol bol kullanacaksınız. Özellikle matris ve determinant varsa NumPy yardımınıza yetişecektir.

Python Liste Değişkenini NumPy Dizi Değişkenine Çevirme

Aşağıdaki kod satırında bir liste değişkeni numpy dizi değişkenine çevrilmiş ve ekrana yazdırılmıştır. Ekran çıktıları açıklama satırı olarak “# : “sembolü ile eklenmiştir.

import numpy as np

my_list = [10,20,30,40,50] #python list variable

my_array = np.array(my_list)  #list variable convert to numpy array type

print(type(my_list)) # : <class 'list'>
print(type(my_array)) # : <class 'numpy.ndarray'>

print(my_array) # : [10 20 30 40 50]
print(my_array[0]) # : 10
print(my_array[-2]) # : 40

my_array[1] = 200
print(my_array) # : [ 10 200  30  40  50]

print(my_array.max()) # : 200 maximum value
print(my_array.min()) # : 10 minimum value
print(my_array.mean()) # : 66.0 average value

list_python = [[1,0,0],[0,1,0],[0,0,1],[0,0,0]] # python list variable
print(list_python[1][1]) # : 1

## Np Matrix
np_matrix = np.array(list_python) # NumPy matrix variable
print(np_matrix) # :
                     # [1 0 0]
                     # [0 1 0]
                     # [0 0 1]
                     # [0 0 0]

print(np_matrix[0]) # : [1,0,0]
print(np_matrix[0][0]) # : 1

print(np_matrix.shape) # : (4,3)  array size 4-rows and 3-columns

## Arrange ##
new_matrix = np.arange(0,10) # : [0 1 2 3 4 5 6 7 8 9]
new_matrix = np.arange(0,100,10) # : [ 0 10 20 30 40 50 60 70 80 90]
print(new_matrix)

print(np.zeros((3,3)))
                        # : [0. 0. 0.]
                        #   [0. 0. 0.]
                        #   [0. 0. 0.]
print(np.ones((4,3)))
                        #: [1. 1. 1. 1.]
                        #  [1. 1. 1. 1.]
                        #  [1. 1. 1. 1.]
                        #  [1. 1. 1. 1.]

## linspace:
print(np.linspace(0,10,10))
            # [ 0.          1.11111111  2.22222222  3.33333333  4.44444444  5.55555556
            #   6.66666667  7.77777778  8.88888889 10.        ]

## random:
print(np.random.randint(1,100,5)) # : [75 82 83 26 56] 1 to 100 random 5 numbers
Python
  • np.array(list): dizi değişkeni numpy matris değişken türüne çevirir.
  • np_matrix[i][j]: i-satır indeksi ve j-sütun indeksi
  • np_matrix.shape: matrisin boyutunu verir (rows, cols)

Np.zeros(i,j) ve Np.ones(i,j) ile Matris Oluşturma

np.zeros(3,3)[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
3×3 boyutunda 0-sıfır matrisi oluştur.
np.ones(4,3)[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
4×3 boyutunda 1-birler matrisi oluştur.

Np.linespace(start,stop,num) ve Np.random.randint(low,high,size) ile Matris Oluşturma

np.linespace(0,10,10)[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
# 6.66666667 7.77777778 8.88888889 10. ]
0’dan 10’a kadar belirli arlıklarla lineer sayılar oluştur
np.random.randint(1,100,5)[87 70 31 45 73]1’den 100’e kadar 5 adet rasgele tam sayı üret.

NumPy ile Slicing (Dilimleme) İşlemleri

import numpy as np

np_array = np.arange(0,10) # : [0 1 2 3 4 5 6 7 8 9]
print(np_array)

## Slicing
print(np_array[2:6]) # : [2 3 4 5 ]
print(np_array[0:10:2]) # : [0 2 4 6 8]

np_array[2:5] = -1 # : [ 0  1 -1 -1 -1  5  6  7  8  9]
print(np_array)
Python
  • np_array olarak tanımlanan diziden parça almak için np_array[başlangıç_indeks, bitiş_indeks, adım] şeklinde yazılabilir.
  • np_array[i:j:x] = -1 ile herhangi bir değer atanabilir. Bu atama işlemini listelerde yapamıyorduk.

Python NumPy Dizilerde Slicing ile Etkilenen Diziler Oluşturalım

  • np.arange(0,10) ile bir np dizi oluşturalım.
  • np_array değişkenin içinde [0 1 2 3 4 5 6 7 8 9] olacaktır.
  • mid_array = np_array[3:7] ile bu dizi içerisinden bir parça alıp yeni bir değişkene atayalım.
  • mid_array[:] = 10 ile bu yeni dizinin tüm elemanlarını 10 yapalım.
  • print[mid_array] –> [10 10 10 10] olacaktır.
  • Ancak işin ilginç yanı
    print(np_array) –> [ 0 1 -1 10 10 10 10 7 8 9] ilk tanımlanan diziye bir değer ataması yapmadığımız halde 3 ve 7’nci indeksler arasındaki sayılarda 10 olarak değiştirilmiş.

Bu slicing – dilimleme metodu sadece NumPy dizilerinde bu şekilde çalışmaktadır. Python standart liste yapısında slicing ile toplu veri atama yapılamaz. Tek tek değiştirilebilir ancak yine de parça alınan ana listedeki elemanlar değişmezler.

Bu slicing metodundan kurtulmak için diziyi farklı şekilde dilimlememiz gerekiyor.

  • np_copy_array = np_array.copy() ile bağımsız kopya bir dizi oluşturup buradan slicing ile bir parça alıp değer atanırsa np_array içerisindeki hiçbir veri değişmeyecektir.
import numpy as np

# Slicing Copy Arrays Method
a_array = np.arange(0,10) # : [0 1 2 3 4 5 6 7 8 9] --> [0 1 2 3 4 5 6 7 8 9]
b_array = a_array.copy() # : [0 1 2 3 4 5 6 7 8 9] --> [0 1 2 3 99 99 99 99 99 9]
c_array = b_array[4:9] # : [4 5 6 7 8]
c_array[:] = 99 # : [99 99 99 99 99]

print(f"a_array={a_array}\nb_array={b_array}\nc_array={c_array}")
Python
numpy copy arrays

NumPy Dizi İşlemleri

import numpy as np

x_array = np.random.randint(1,100,20)
final_array = x_array > 50 # : [ True  True  True  True False False  True False  True  True False False
                    # False False False  True False False False  True]
print((x_array[final_array])) # : >50 listing --> [58 66 56 93 62 67 98 56 77 93 52 61]
Python

büyüktür (>), küçüktür (<), eşittir (=) veya eşit değildir(!=) operatörlerini numpy dizilerinde bu şekilde kullanabilirsiniz.

Hatta burada final_array adlı diziyi oluşturmadan da 1 satır kısaltarak yazabiliriz.

import numpy as np

x_array = np.random.randint(1,100,20)

print(x_array[x_array > 50]) # : >50 listing --> [58 66 56 93 62 67 98 56 77 93 52 61]
Python

NumPy Dizilerde Matematiksel İşlemler

Toplama, Çıkarma, Bölme ve Çarpma (Dört İşlem)

Standart python dizilerinden yapı itibariyle oldukça gelişmiş olan NumPy dizilerini birbiri ile toplama, çıkarma, çarpma ve bölme işlemi yapabilirsiniz. NumPy bu işlemleri index bazlı yapmaktadır.

import numpy as np

end_array = np.arange(1,10)

print(end_array) # : [1 2 3 4 5 6 7 8 9]
print(end_array + end_array) # : [ 2  4  6  8 10 12 14 16 18]
print(end_array - end_array) # : [0 0 0 0 0 0 0 0 0]
print(end_array * end_array) # : [ 1  4  9 16 25 36 49 64 81]
print(end_array / end_array) # : [1. 1. 1. 1. 1. 1. 1. 1. 1.]
Python

Python NumPy dizileri ile matematiksel 4 işlem yaparken dikkat etmeniz gereken nokta iki dizinin boyutları (eleman sayısı) aynı olmalıdır.

Örneğin;

import numpy as np

end_array = np.arange(1,10)
and_array = np.arange(2,8)

print(end_array + end_array)
Python

şeklinde iki farklı boyuttaki numpy dizisini toplamaya çalışırsanız, ValueError: operands could not be broadcast together with shapes (9,) (6,) hatası alırsınız. Özetle birinci dizi 9 elemanlı ve ikinci dizi 6 elemanlı bunları toplayamam diyor.

Max(), Min(), Mean(), Sqrt() Metodları

Numpy dizisindeki elemanların en büyük, en küçük ve ortalamasını alan metodlar.

Bu işlemleri iki farklı yöntemle uygulayabilirsiniz;

  • this_array.max() veya np.max(this_array) her ikisi de aynı sonucu döndürür. Ancak yaygın kullanım np.max(this_array) şeklindedir.
import numpy as np

this_array = np.arange(1,10)

print(this_array.max()) # : 9
print(np.max(this_array)) # : 9

print(this_array.min()) # : 1
print(this_array.mean()) # : 5.0

print(np.sqrt(this_array[2])) # : 1.7320508075688772 karekök
Python

ZİYARETÇİ YORUMLARI - 0 YORUM

Henüz yorum yapılmamış.

Bu web sitesi, bilgisayarınıza bilgi depolamak amacıyla bazı tanımlama bilgilerini kullanabilir.
Bu bilgilerin bir kısmı sitenin çalışmasında esas rolü üstlenirken bir kısmı ise kullanıcı deneyimlerinin iyileştirilmesine ve geliştirilmesine yardımcı olur.
Sitemize ilk girişinizde vermiş olduğunuz çerez onayı ile bu tanımlama bilgilerinin yerleştirilmesine izin vermiş olursunuz.
Çerez bilgilerinizi güncellemek için ekranın sol alt köşesinde bulunan mavi kurabiye logosuna tıklamanız yeterli. Kişisel Verilerin Korunması,
Gizlilik Politikası ve Çerez (Cookie) Kullanımı İlkeleri hakkında detaylı bilgi için KVKK&GDPR sayfamızı inceleyiniz.
| omersahin.com.tr |
Copyright | 2007-2025