NumPy ile Çok Boyutlu Diziler#

NumPy, Python programlama dilinde sayısal işlemler için kullanılan açık kaynaklı bir kütüphanedir. Bu kütüphane, büyük veri setleri üzerinde hızlı ve etkili hesaplamalar yapmak için tasarlanmıştır ve bilimsel, mühendislik ve veri analizi uygulamaları için sıkça kullanılır. NumPy, matematiksel ve istatistiksel hesaplamalar yapmak, çok boyutlu diziler ve matrislerle çalışmak ve lineer cebir işlemlerini gerçekleştirmek için bir dizi fonksiyon ve araç sağlar. Bu bölümde, NumPy’nin temel özelliklerini ve kullanımını daha ayrıntılı olarak inceleyeceğiz.

NumPy Kütüphanesine Giriş#

NumPy, Python programlama dilinde sayısal işlemleri gerçekleştirmek için kullanılan bir kütüphanedir. Bu kütüphane, büyük veri setleri üzerinde hızlı ve etkili hesaplamalar yapmak için özel olarak tasarlanmıştır. Ayrıca, bilimsel ve matematiksel hesaplamalar yapmak için bir dizi fonksiyon ve araç sağlar. Bu nedenle, birçok veri bilimi, mühendislik ve bilimsel uygulama, NumPy kullanarak hesaplama yapar. NumPy, çok boyutlu dizileri ve matrisleri işlemek için optimize edilmiştir ve bu nedenle de büyük veri setleri üzerinde hızlı işlemler yapmak için idealdir.

NumPy kütüphanesi, birçok matematiksel fonksiyonu içerir. Örneğin, trigonometrik fonksiyonlar (sinüs, kosinüs, tanjant, vb.), logaritmalar, üs alma, karekök alma, vb. gibi temel matematiksel işlemleri gerçekleştirmek için kullanılabilir. Ayrıca, NumPy, polinomlar, fonksiyonlar ve veriler üzerinde çeşitli istatistiksel işlemleri gerçekleştirmek için de bir dizi fonksiyon sağlar.

NumPy kütüphanesi, verileri diziler halinde saklar. Bu diziler, farklı boyutlara sahip çok boyutlu diziler olarak tanımlanabilir. NumPy dizileri, Python listelerinden daha hızlı ve daha verimlidir ve bu nedenle büyük veri setleri üzerinde çalışmak için idealdir. NumPy, ayrıca bu diziler üzerinde çeşitli işlemler yapmak için bir dizi fonksiyon sağlar. Örneğin, dizileri birleştirmek, yeniden şekillendirmek, kesmek, vb.

NumPy kütüphanesi ayrıca, çeşitli lineer cebir işlemlerini de gerçekleştirmek için kullanılabilir. Örneğin, matris çarpımı, matris tersi alma, determinant hesaplama, vb. gibi işlemler yapmak için NumPy fonksiyonları kullanılabilir.

Sonuç olarak, NumPy, Python programlama dilinde sayısal işlemleri gerçekleştirmek için kullanılan bir kütüphanedir. Büyük veri setleri üzerinde hızlı ve etkili hesaplamalar yapmak için özel olarak tasarlanmıştır. NumPy, bilimsel ve matematiksel hesaplamaları yapmak için birçok fonksiyon ve araç sağlar ve çok boyutlu dizileri ve matrisleri işlemek için optimize edilmiştir. NumPy, verileri diziler halinde saklar ve büyük veri setleri üzerinde çalışmak için idealdir.

Çağırma ve import etme#

NumPy’yı kullanmak için öncelikle kütüphaneyi çağırmalıyız. Bu, genellikle aşağıdaki şekilde yapılır:

import numpy as np

Bu, NumPy kütüphanesini Python programına dahil eder ve np kısaltması ile çağırmayı sağlar. Ardından, NumPy dizileri oluşturmak ve temel işlemler yapmak için aşağıdaki gibi kodlar yazılabilir:

import numpy as np

# 1D NumPy dizi oluşturma
a = np.array([1, 2, 3])
print(a)

# 2D NumPy dizi oluşturma
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)

# NumPy dizileri üzerinde temel işlemler yapma
c = np.array([1, 2, 3])
d = np.array([4, 5, 6])

print(c + d) # toplama
print(c - d) # çıkarma
print(c * d) # çarpma
print(c / d) # bölme
[1 2 3]
[[1 2 3]
 [4 5 6]]
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ]

Bu kodlar, 1D ve 2D NumPy dizileri oluşturmak için np.array() fonksiyonunu kullanır ve temel matematiksel işlemleri gerçekleştirmek için NumPy dizileri üzerinde +, -, *, / operatörlerini kullanır.

NumPy versiyonu#

NumPy’nin sürümü, kütüphanenin özelliklerinde ve işlevlerindeki değişiklikleri yansıtır ve kullanıcıların hangi sürümün yüklü olduğunu ve hangi özellikleri kullanabileceklerini bilmesini sağlar.

NumPy sürümünü kontrol etmek için, aşağıdaki gibi bir kod kullanabilirsiniz:

np.__version__
'1.20.3'

NumPy sürümü, kütüphanenin yüklendiği Python sürümüne göre değişebilir. Bu nedenle, farklı Python sürümleri için farklı NumPy sürümleri mevcut olabilir. NumPy’nin web sitesinde, hangi Python sürümlerinin hangi NumPy sürümleriyle uyumlu olduğuna dair bir uyumluluk tablosu mevcuttur.

Çok Boyutlu Diziler#

NumPy’nin en önemli özelliklerinden biri, çok boyutlu dizileri desteklemesidir. Çok boyutlu diziler, farklı boyutlardaki verileri saklamak için kullanılan veri yapılarıdır. NumPy, iki veya daha fazla boyutta veri depolamak için kullanılan çok boyutlu dizilere olanak tanır. Çok boyutlu diziler, matrisler olarak da bilinir ve 2D NumPy dizileri matrislerin bir örneğidir.

NumPy’da çok boyutlu dizileri oluşturmak için, np.array() fonksiyonuna bir liste veya bir dizi veri girilir. Örneğin, aşağıdaki kod, 2 satır ve 3 sütun içeren bir matris oluşturur:

# 2D NumPy dizi oluşturma
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
[[1 2 3]
 [4 5 6]]

NumPy, aynı boyutta olmayan çok sayıda boyutlu diziyi destekler. Örneğin, aşağıdaki kod, 2 matris ve her matris 2 satır ve 3 sütundan oluşan 3 boyutlu bir dizi oluşturur:

# 3D NumPy dizi oluşturma
b = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(b)
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]

Çok boyutlu diziler üzerinde farklı matematiksel işlemler yapılabilir ve NumPy, çok boyutlu diziler üzerinde işlemleri hızlı bir şekilde gerçekleştirebilir.

Matematiksel işlemler#

NumPy dizileri, farklı matematiksel işlemleri gerçekleştirmek için bir dizi yönteme (metot) sahiptir. Bazı yaygın kullanılan NumPy dizisi yöntemleri aşağıda açıklanmıştır:

  • ndarray.ndim: Dizi boyutunu döndürür.

  • ndarray.shape: Dizi boyutlarını tuple olarak döndürür.

  • ndarray.size: Dizideki elemanların toplam sayısını döndürür.

  • ndarray.dtype: Dizinin veri tipini döndürür.

  • ndarray.reshape(): Dizi şeklini değiştirir.

  • ndarray.min(): Dizideki en küçük elemanı döndürür.

  • ndarray.max(): Dizideki en büyük elemanı döndürür.

  • ndarray.sum(): Dizideki tüm elemanların toplamını döndürür.

  • ndarray.mean(): Dizideki tüm elemanların ortalamasını döndürür.

  • ndarray.std(): Dizideki tüm elemanların standart sapmasını döndürür.

  • ndarray.transpose(): Dizinin transpozunu döndürür.

Örneğin, aşağıdaki kod, bir NumPy dizisi oluşturur ve shape ve size yöntemlerini kullanarak dizinin boyutunu ve eleman sayısını gösterir:

# NumPy dizi oluşturma
a = np.array([[1, 2, 3], [4, 5, 6]])
print("Shape of array:", a.shape) # çıktı: (2, 3)
print("Size of array:", a.size) # çıktı: 6
Shape of array: (2, 3)
Size of array: 6

Ayrıca, aşağıdaki kod, reshape() ve transpose() yöntemlerini kullanarak dizi şeklini değiştirir ve transpozunu alır:

# Dizi şeklini değiştirme
b = a.reshape((3, 2))
print("Reshaped array:", b) # çıktı: [[1 2] [3 4] [5 6]]

# Dizinin transpozunu alma
c = a.transpose()
print("Transposed array:", c) # çıktı: [[1 4] [2 5] [3 6]]
Reshaped array: [[1 2]
 [3 4]
 [5 6]]
Transposed array: [[1 4]
 [2 5]
 [3 6]]

3 boyutlu diziler#

NumPy ile 3 boyutlu diziler, 2 boyutlu dizilerde olduğu gibi çok sayıda matematiksel işlem için kullanılabilir. 3 boyutlu diziler, veri depolama, işleme ve görselleştirme gibi uygulamalarda kullanılır. 3 boyutlu bir NumPy dizisi oluşturmak için, numpy.array() fonksiyonuna 3 boyutlu bir liste vermek yeterlidir.

Aşağıda, bir 3 boyutlu dizi oluşturmanın ve farklı işlemler yapmanın örnekleri verilmiştir:

# 3 boyutlu dizi oluşturma
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("Shape of array:", a.shape) # çıktı: (2, 2, 2)

# Dizinin elemanlarına erişme
print("Element at [0, 1, 0]:", a[0, 1, 0]) # çıktı: 3

# Dizinin şeklini değiştirme
b = a.reshape((2, 4))
print("Reshaped array:", b) # çıktı: [[1 2 3 4] [5 6 7 8]]

# Dizinin maksimum değerini bulma
max_value = a.max()
print("Max value of array:", max_value) # çıktı: 8

# Dizinin elemanlarının toplamını bulma
sum_value = a.sum()
print("Sum of array:", sum_value) # çıktı: 36

# Dizinin transpozunu alma
c = a.transpose()
print("Transposed array:", c) # çıktı: [[[1 5] [3 7]] [[2 6] [4 8]]]
Shape of array: (2, 2, 2)
Element at [0, 1, 0]: 3
Reshaped array: [[1 2 3 4]
 [5 6 7 8]]
Max value of array: 8
Sum of array: 36
Transposed array: [[[1 5]
  [3 7]]

 [[2 6]
  [4 8]]]

Yukarıdaki örnekte, a adlı bir 3 boyutlu dizi oluşturulmuş, sonra dizinin şekli (shape) ve boyutu (size) gösterilmiştir. Daha sonra, dizinin elemanlarına erişmek için indeksleme yapılmış, şekli değiştirme, maksimum değeri bulma, elemanlarının toplamını bulma ve transpozunu alma gibi işlemler yapılmıştır.

3 boyutlu diziler, matrislerin aksine, üçüncü bir boyutu da içerdiğinden, farklı bir gösterime ihtiyaç duyarlar. Bir 3 boyutlu dizi, üç farklı boyutta bulunan bir dizi noktadan oluşur. Örneğin, bir RGB resmin 3 boyutlu bir dizi olarak düşünülebilir, bu durumda resimdeki her piksel üç boyutlu bir nokta olacaktır. Aşağıdaki örnek, bir 3 boyutlu dizi gösterimini göstermektedir:

[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]]

Bu örnekte, 2x2 boyutlu ve 2 adet 2x2 matris içeren bir 3 boyutlu dizi gösterilmiştir. İlk matris şöyle gösterilir:

[[ 1  2]
 [ 3  4]]

İkinci matris de şöyle gösterilir:

[[ 5  6]
 [ 7  8]]

Bu matrisler, birbirleriyle aynı düzlemde bulunur, ancak farklı birer “katmanda” yer alırlar. Böylece, bu matrislerin üst üste yığılıp 3 boyutlu bir dizi oluşturdukları görülür.

3 boyutlu dizilerin gösteriminde, matrislerin gösterimindeki gibi her bir eleman arasında bir boşluk yerine, elemanları ayırmak için virgül kullanılır. Ayrıca, farklı katmanlardaki matrisler, aralarına bir boşluk bırakılarak gösterilirler.

Elemanlara ulaşma#

Numpy dizilerinde, elemanlara erişmek için indeksleme ve dilimleme işlemleri kullanılır. İndeksleme, dizinin belirli bir elemanına doğrudan erişmek için kullanılırken, dilimleme işlemi, dizinin belirli bir alt kümesine erişmek için kullanılır.

Indeksleme#

Indeksleme, belirli bir elemana doğrudan erişmek için kullanılır. Dizilerin indeksleri 0’dan başlar. Örneğin, aşağıdaki kodda, 0, 1 ve 2. elemanlara sırasıyla erişilmiştir.

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

print(arr[0]) # 1
print(arr[1]) # 2
print(arr[2]) # 3
1
2
3

3 boyutlu bir dizi üzerinde çalışırken, elemanlara erişmek için üç boyutlu bir indeks kullanmanız gerekir. Örneğin, aşağıdaki kodda, 1. katmanın 0, 0 ve 1. elemanına erişilmiştir:

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

print(arr[1,0,0]) # 5
print(arr[1,0,1]) # 6
5
6

Dilimleme#

Dilimleme, dizinin belirli bir alt kümesine erişmek için kullanılır. Dilimleme işlemi, iki nokta arasındaki dizinin bütün elemanlarını alır. Örneğin, aşağıdaki kodda, 1. ve 2. elemanlar arasındaki elemanlar alınmıştır.

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

print(arr[1:3]) # [2, 3]
[2 3]

3 boyutlu bir dizi üzerinde çalışırken, dilimleme işlemi için üç boyutlu bir dilimleme işlemi yapmanız gerekir. Örneğin, aşağıdaki kodda, 1. katmanın tüm elemanları alınmıştır:

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

print(arr[1,:,:]) # [[5, 6], [7, 8]]
[[5 6]
 [7 8]]

Ayrıca, dilimleme işleminde iki nokta yerine üç nokta kullanarak da belirli bir adımda elemanları seçebilirsiniz. Örneğin, aşağıdaki kodda, 1. katmanın 0. ve 1. sıralarındaki elemanlar, ikişer ikişer atlanarak alınmıştır:

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

print(arr[1::2, 0::2,:]) # [[[5, 6]]]
[[[5 6]]]

Burada, 1::2 ifadesi, 1. katmandan başlayarak her iki elemanı alacağını belirtirken, 0::2 ifadesi, 0. ve 1. sıralardan başlayarak her iki elemanı alacağını belirtir. Son olarak : ifadesi, tüm sütunlardaki elemanları alacağını belirtir.

Numpy dizilerinde indeksleme ve dilimleme işlemleri oldukça güçlüdür ve verilerin büyük ölçekli işlemlerini yapmak için önemlidir.

Mantıksal dilimleme#

Mantıksal dilimleme (boolean indexing) yöntemi, numpy dizilerinde belirli koşulları sağlayan verileri seçmek için kullanılır. Bu işlem, belirli koşulları sağlayan verileri filtrelemek için çok kullanışlıdır.

Örneğin, aşağıdaki numpy dizisinde 10’dan küçük olan tüm elemanları seçmek isteyelim:

a = np.array([1, 4, 10, 2, 8, 15, 3, 9])

a[a < 10] # array([1, 4, 2, 8, 3, 9])
array([1, 4, 2, 8, 3, 9])

Burada, a < 10 ifadesi, a dizisindeki her elemanın 10’dan küçük olup olmadığını kontrol eder ve sonuç olarak bir bool numpy dizisi döndürür. Bu bool dizisindeki True değerleri, ana dizideki o konumdaki elemanın seçileceğini belirtir. Sonuç olarak, a[a < 10] ifadesi ile 10’dan küçük olan tüm elemanlar seçilir.

Mantıksal dilimleme yöntemi, çok boyutlu dizilerde de kullanılabilir. Örneğin, aşağıdaki numpy dizisinde 3’ten büyük olan tüm elemanları seçmek isteyelim:

b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

b[b > 3] # array([4, 5, 6, 7, 8, 9])
array([4, 5, 6, 7, 8, 9])

Burada, b > 3 ifadesi, b dizisindeki her elemanın 3’ten büyük olup olmadığını kontrol eder ve sonuç olarak bir bool numpy dizisi döndürür. Bu bool dizisindeki True değerleri, ana dizideki o konumdaki elemanın seçileceğini belirtir. Sonuç olarak, b[b > 3] ifadesi ile 3’ten büyük olan tüm elemanlar seçilir.

Mantıksal dilimleme yöntemi, numpy dizilerindeki veri filtrelemesi yaparken çok kullanışlı bir yöntemdir.

Dizilerde aritmetik işlemler#

Numpy dizilerinde aritmetik işlemler, çok hızlı bir şekilde yapılabilir. Temel aritmetik işlemleri (+, -, *, /, **) numpy dizilerinde doğrudan kullanabilirsiniz. Bu işlemler, her bir öğeye ayrı ayrı uygulanır.

a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])

c = a + b  # [6 8 10 12]
d = a - b  # [-4 -4 -4 -4]
e = a * b  # [ 5 12 21 32]
f = b / a  # [5.         3.         2.33333333 2.        ]
g = a ** 2 # [ 1  4  9 16]

Ayrıca, numpy dizileri arasında işlemler de yapabilirsiniz. Bunun için, iki numpy dizisinin şekillerinin uyumlu olması gerekir.

a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = np.array([[1, 2], [3, 4]])

d = a + c  # ValueError: operands could not be broadcast together with shapes (4,) (2,2)
e = c + b  # [[ 6  8]
           #  [10 12]]
f = a * c  # [[ 1  4]
           #  [ 9 16]]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_15032/4240253268.py in <module>
      3 c = np.array([[1, 2], [3, 4]])
      4 
----> 5 d = a + c  # ValueError: operands could not be broadcast together with shapes (4,) (2,2)
      6 e = c + b  # [[ 6  8]
      7            #  [10 12]]

ValueError: operands could not be broadcast together with shapes (4,) (2,2) 

Burada, d = a + c işleminde, a dizisi tek boyutlu iken c dizisi 2 boyutlu olduğundan işlem yapılamaz ve hata verir. e = c + b işleminde, b dizisi 1 boyutlu ve c dizisi 2 boyutlu olduğundan, b dizisi otomatik olarak [[5, 6], [5, 6]] şekline yayılır (broadcast) ve işlem yapılabilir. f = a * c işleminde, a dizisi ve c dizisi boyutları uyumlu olduğundan doğrudan işlem yapılabilir.

Numpy dizilerinde aritmetik işlemler yaparken, dizilerin şekillerine ve veri tiplerine dikkat etmek önemlidir.

Matris işlemleri#

Numpy, matris işlemleri yapmak için kullanışlı bir kütüphanedir. Matrisler, numpy dizileri olarak temsil edilir ve numpy, matris işlemlerini yapmak için uygun fonksiyonları sağlar.

Matrislerin çarpımı, özellikle makine öğrenmesi ve veri analizi gibi birçok alanda kullanılan temel bir matematiksel işlemdir. Numpy ile matris çarpımı yapmak için dot fonksiyonu kullanılır. Bu fonksiyon, iki matrisi çarpar ve sonucu yeni bir matris olarak döndürür.

# 2x3'lük bir matris
a = np.array([[1, 2, 3], [4, 5, 6]])

# 3x2'lik bir matris
b = np.array([[7, 8], [9, 10], [11, 12]])

# matris çarpımı
c = np.dot(a, b)

print(c)
[[ 58  64]
 [139 154]]

Yukarıdaki örnekte, a ve b matrisleri dot fonksiyonu ile çarpılır ve sonuç olarak yeni bir matris olan c oluşur. c matrisi, a matrisinin satırları ile b matrisinin sütunları arasındaki iç çarpımları temsil eder.

Numpy ayrıca, matrisin tersini, determinantını, izini ve diğer matris işlemlerini yapmak için de fonksiyonlar sağlar. Örneğin, bir matrisin tersi inv fonksiyonu kullanılarak bulunabilir.

a = np.array([[1, 2], [3, 4]])
b = np.linalg.inv(a)

print(b)
[[-2.   1. ]
 [ 1.5 -0.5]]

Yukarıdaki örnekte, a matrisinin tersi inv fonksiyonu ile hesaplanır ve b matrisine atılır. Matrisin tersi, matrisin boyutlarına ve özelliklerine bağlı olarak bulunmayabilir veya tanımlı olmayabilir. Bu nedenle, matris işlemleri yaparken matrisin özelliklerine ve boyutlarına dikkat etmek önemlidir.

Sıralı Dizi Oluşturma#

Numpy, sıralı dizi oluşturma yöntemleri için birkaç farklı fonksiyon sağlar. Bu fonksiyonlar, belirli bir aralıkta belirli bir adımda artan, azalan veya rastgele değerler üretmek için kullanılabilir.

  1. arange: Belirli bir aralıkta belirli bir adımda artan değerler üretir. arange fonksiyonunun kullanımı şu şekildedir:

# 0'dan 10'a kadar (10 hariç) 2 adımda artan değerler
a = np.arange(0, 10, 2)

print(a)
[0 2 4 6 8]

Yukarıdaki örnekte, arange fonksiyonu ile 0 ile 10 arasında (10 hariç) 2 adımda artan bir dizi oluşturulur ve a değişkenine atılır.

  1. linspace: Belirli bir aralıkta belirli bir sayıda eşit aralıklı değerler üretir. linspace fonksiyonunun kullanımı şu şekildedir:

# 0 ile 1 arasında 5 adet eşit aralıklı değer
a = np.linspace(0, 1, 5)

print(a)
[0.   0.25 0.5  0.75 1.  ]

Yukarıdaki örnekte, linspace fonksiyonu ile 0 ile 1 arasında 5 adet eşit aralıklı bir dizi oluşturulur ve a değişkenine atılır.

  1. logspace: Belirli bir aralıkta belirli bir sayıda eşit logaritmik aralıklı değerler üretir. logspace fonksiyonunun kullanımı şu şekildedir:

# 10 üzeri 0'dan 10 üzeri 3'e kadar (10 üzeri 3 dahil) 4 adet logaritmik aralıklı değer
a = np.logspace(0, 3, 4)

print(a)
[   1.   10.  100. 1000.]

Yukarıdaki örnekte, logspace fonksiyonu ile 10 üzeri 0’dan 10 üzeri 3’e kadar (10 üzeri 3 dahil) 4 adet eşit logaritmik aralıklı bir dizi oluşturulur ve a değişkenine atılır.

  1. zeros ve ones: Sıfırlardan veya birlerden oluşan bir dizi oluşturur. zeros ve ones fonksiyonlarının kullanımı şu şekildedir:

# 2x3'lük bir sıfır matrisi
a = np.zeros((2, 3))

# 3x3'lük bir birler matrisi
b = np.ones((3, 3))

print(a)
print(b)
[[0. 0. 0.]
 [0. 0. 0.]]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

Dizilerin kaydedilmesi ve kopyalanması#

Numpy dizileri, Python listelerinden farklı olarak verileri doğrudan bellekte tutar. Bu nedenle, bir dizi oluşturulduktan sonra veriler üzerinde değişiklik yapmak mümkündür ancak bu verilerin orijinal halini kaybetme riski vardır. Bu nedenle, Numpy dizilerinin kopyalanması ve kaydedilmesi işlemleri dikkatli bir şekilde yapılmalıdır.

Dizilerin Kaydedilmesi:

Numpy dizileri, .npy uzantılı dosyalara kaydedilebilir ve daha sonra load fonksiyonuyla tekrar yüklenebilir. Dizi kaydetmek için save fonksiyonu kullanılır:

# 1x4'lük bir dizi oluştur
a = np.array([1, 2, 3, 4])

# Diziyi kaydet
np.save("dizi.npy", a)

# Kaydedilmiş diziyi yükle
b = np.load("dizi.npy")

print(b)
[1 2 3 4]

Yukarıdaki örnekte, save fonksiyonu ile a dizisi “dizi.npy” adlı dosyaya kaydedilir ve load fonksiyonu ile tekrar yüklenerek b değişkenine atanır.

Dizilerin Kopyalanması:

Numpy dizilerinin kopyalanması iki şekilde yapılabilir: “shallow copy” (yüzeysel kopya) ve “deep copy” (derin kopya).

Yüzeysel kopya (view) fonksiyonu, dizinin verilerini doğrudan kopyalamaz. Bunun yerine, orijinal dizi ile yeni dizi arasında bir referans bağı oluşturur. Bu nedenle, bir dizi üzerinde yapılan değişiklikler, yüzeysel bir kopyasını alınan dizi üzerinde de yapılır:

# 2x2'lik bir dizi oluştur
a = np.array([[1, 2], [3, 4]])

# Yüzeysel bir kopya oluştur
b = a.view()

# a dizisindeki verileri değiştir
a[0][0] = 0

print(a)
print(b)
[[0 2]
 [3 4]]
[[0 2]
 [3 4]]

Yukarıdaki örnekte, view fonksiyonu ile a dizisinin yüzeysel bir kopyası oluşturulur ve b değişkenine atanır. a dizisindeki veriler değiştirildiğinde, b dizisi de etkilenir.

Derin kopya (copy) fonksiyonu, bir dizinin tamamen yeni bir kopyasını oluşturur. Bu nedenle, orijinal dizi üzerinde yapılan değişiklikler, derin bir kopyasını alınan dizi üzerinde etkilemez:

# 2x2'lik bir dizi oluştur
a = np.array([[1, 2], [3, 4]])

# Derin bir kopya oluştur
b = a.copy()

# a dizisindeki verileri değiştir
a[0][0] = 0

print(a)
print(b)
[[0 2]
 [3 4]]
[[1 2]
 [3 4]]

Yukarıdaki örnekte, copy fonksiyonu ile a dizisinin derin bir kopyası oluşturulur ve b değişkenine atanır. a dizisindeki veriler değiştirildiğinde, b dizisi bundan etkilenmez.

Özetle, Numpy dizileri .npy dosyalarına kaydedilebilir ve yüzeysel kopya ve derin kopya yöntemleri kullanılarak kopyalanabilir. Ancak, verilerin doğrudan bellekte tutulması nedeniyle, diziler üzerinde yapılan değişiklikler orijinal verileri etkileyebilir. Bu nedenle, Numpy dizileri üzerinde işlem yaparken dikkatli olunmalı ve kaydetme ve kopyalama işlemleri dikkatle yapılmalıdır.

Sayı formatlama#

fmt (format) parametresi, Numpy dizilerini yazdırırken kullanılan bir biçimlendirme parametresidir. Bu parametre, yazdırılan dizinin elemanlarının nasıl biçimlendirileceğini belirler.

fmt parametresi, standart Python biçimlendirme dizelerini kullanır. Örneğin, "%d" bir tamsayı olarak biçimlendirirken, "%f" bir ondalık sayı olarak biçimlendirir. Aşağıdaki örnek, fmt parametresi kullanarak bir Numpy dizisini yazdırmak için np.savetxt() fonksiyonunu kullanır:

# 3x3 boyutunda bir dizi oluştur
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Diziyi bir metin dosyasına yazdır
np.savetxt('my_array.txt', a, fmt='%d')

# Dosyayı oku ve yazdır
with open('my_array.txt', 'r') as f:
    print(f.read())
1 2 3
4 5 6
7 8 9

Bu örnekte, fmt='%d' parametresi, a dizisindeki elemanları tam sayı olarak biçimlendirir ve my_array.txt adlı bir dosyaya yazdırır. Dosya, aşağıdaki gibi görünecektir:

1 2 3
4 5 6
7 8 9

fmt parametresi, aynı zamanda farklı biçimlendirmeleri bir arada kullanmak için de kullanılabilir. Örneğin, aşağıdaki örnek, bir Numpy dizisindeki sayıları tam sayı ve ondalık olarak bir arada kullanarak yazdırır:

# 3x3 boyutunda bir dizi oluştur
a = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])

# Diziyi bir metin dosyasına yazdır
np.savetxt('my_array.txt', a, fmt='%.2f')

# Dosyayı oku ve yazdır
with open('my_array.txt', 'r') as f:
    print(f.read())
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00

Bu örnekte, fmt='%d %.2f' parametresi, dizideki tam sayıları tam sayı olarak ve ondalık sayıları iki ondalık basamaklı olarak biçimlendirir. Dosya aşağıdaki gibi görünecektir:

1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00

Formatlama ile ilgili daha detaylı örneklere şu adresten ulaşılabilir.

Sonuç#

Bu bölümde, Numpy kütüphanesiyle ilgili çeşitli konular ele alındı. Öncelikle, Numpy kütüphanesini nasıl kullanacağımızı, dizilerin nasıl oluşturulacağını ve 3 boyutlu dizilerin nasıl kullanılacağını öğrendik. Daha sonra, dizilerdeki indeksleme, dilimleme ve mantıksal dilimleme yöntemlerini inceledik. Ayrıca, Numpy dizileri üzerinde aritmetik ve matris işlemleri yapmanın yanı sıra, sıralı diziler oluşturma yöntemlerini de öğrendik. Son olarak, dizilerin kaydedilmesi, kopyalanması ve fmt parametresi hakkında bilgi edindik. Numpy kütüphanesi, bilimsel hesaplama ve veri analizi için güçlü bir araçtır ve bu bölümde ele aldığımız konuların bir kısmı, Numpy ile yapabileceğimiz işlemlerin sadece bir örneğidir.