NumPy Dizilerine Giriş

NumPy dediğimiş şey ndarray ismisyle anılan multidimensional bir objedir. İki kısımdan oluşur: veri ve veriyi tanımlayan metadata(üstveri).

NumPy dizileriyle vektörel işlemleri yapabilir, normal list’lere karşın diziyi tümden döngü gerekmeksizin işleyebilirsiniz. NumPy’ın bu sırrı, dizileri çok hızlı işleyebilmek için ise optimize edilmiş bir C API kullanır.

Tabi NumPy’ı kullanabilmek için ilk önce import etmemiz gerekir. (Sadece belirli fonksiyon kümesini kullanmak istiyorsanız * yerine kullanmak istediğiniz kümenin ismini yazabilirsiniz.)

from numpy import *

numpy’ı işlemlerde prefix olarak kullanacağımız için şu şekilde de import ederek numpy yerine kısadan np harflerini prefix olarak kullanabiliriz.

import numpy as np

Beraber normal dizi ile NumPy dizisi arasındaki basit kodlama farkına bir bakalım:

Normal Python dizisi

def pythonsum(n):
  a=range(n)
  b=range(n)
  c=[]
  for i in range(len(a)):
    a[i]= i**2
    b[i]=i**3
    c.append(a[i]+b[i]) 
  return c

NumPy dizisi

def numpysum(n):
  dizi1=numpy.arange(n) ** 2
  dizi2=numpy.arange(n)**3
  c=dizi1 + dizi2
  return c

Gördüğünüz gibi arange()  fonksiyonuyla 0’dan n’ye kadar olan bir NumPy dizisi ürettik.

Daha farklı şekillerde de dizileri üretebiliriz yani şu şekilde:

dizi4 = np.arange(3)
In: dizi1.dtype
Out: 	dtype(‘ int32’)

olarak çıkış verdi, yani int32 tipinde.

Bu gösterdiğim numpy dizilerinin özelliklerinden sadece biriydi, peki daha neler var kısaca bakalım.

ndarray.shape: Dizinin kaç boyutlu olduğunu verir, yukarıdaki örneğimizde hatırlıyorsanız (5,) çıktısını almıştık

ndarray.dim: Dizinin rankını verir, yani terim ifadesiyle aksislerinin boyutudur.

ndarray.size: Dizideki tüm elemanların sayısını verir.

ndarray.data: Dizideki elemanlara kullandığımız indexleme dışında ulaşma imkanı sağlayan komuttur.

Gelin aşağıdaki OpenCv ile birlikte yapılmış, rastgele RGB değerlerinden görüntü oluşturma yöntemine bir bakalım.

import cv2
import numpy
import os

randomByteArray = bytearray(os.urandom(120000))
flatNumpyArray = numpy.array(randomByteArray)
#3 boyutlu oluştur (rgb)
# Convert the array to make a 400x100 color image.
bgrImage = flatNumpyArray.reshape(100, 400, 3)
cv2.imwrite('RandomColor.png', bgrImage)

En sonunda 3 boyutlu RGB renk uzayında çıktı elde etmek için 120000 adet rastgele oluşturulan değeri reshape(100,400,3) komutuyla (içindekilerin çarpımının 120000 sayısına eşit olduğuna dikkat ediniz) 3 boyutlu hale getirdik ve görüntümüzü oluşturduk