Array Structures [Ar-Ge Kulübü]

AngelRayt

Uzman üye
13 Eki 2015
1,352
15
Python
Her saniye yeni bir değer kazanan ve bunları depolayan bir variable düşünelim. Yapılabilir mi?

İşte bunun için variable yerine arrayler kullanmamız gerekir.
Ram bellekte örnek saklanım:
Tek boyutlu
oqwiQj.gif

OR
GB3vwI.gif

Birden çok boyutlu:
BJvAQ4.jpeg

Kod:
[1,2,3,4,5] = f(x)
f(x) fonksiyonu 5 elemanlı bir Arraydir.

Kod:
f(0) = 1
f(1) = 2
f(3) = 2
f(-1) = 5
f(-5)=1
Yani arrayimizin sıfırdaki görüntüsü 1 dir.
Yani arrayimizin bir deki görüntüsü 2 dir.
Yani arrayimizin -1 deki görüntüsü 5 dir.

.
.
.


1VvRiF.gif



YRsYY5.gif


Kod:
>>> id(array1)
140109484802504
>>> id(array1[0])
10919424
>>> id(array1[1])
10919456
>>> id(array1[2])
10919488
>>> id(array1[3])
10919520
>>> id(array1[4])
10919552

Ram bellekte belirli bir sıraya göre dizilmiş olduğunu görebilirsiniz.
Her biri ram bellekte 32bit yer işgal eder.(Bir tamsayı 4 bayt (32 bit))


Tek boyutlu Arrayler

Kod:
import numpy as np

array = np.array([1,2,3,4,5])
print("Dizi :",array)

print("Size : ",array.shape)

Kod:
Dizi :[[1 2 3 4 5]]
Size:  (1, 5)

Çok boyutlu Diziler:
Peki array tek boyulu olmak zorunda mı? Hayır çok boyutlu olabilir.

Bunun için bize Satır Ve Sütünlar gerekir(Row,Column)
BJvAQ4.jpeg

Kod:
import numpy as np

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

print("Dizi :",array2D)
print('Size :',array2D.shape)
print('2.Satır 3.Sütün: ',array2D[1,2])

Kod:
Dizi : [[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
Size : (2, 5)
2.Satır 3.Sütün:  8

array2D[1,4]
Out[10]: 10

array2D[1,3]
Out[11]: 9

array2D[0,3]
Out[12]: 4

Bir de adreslerine bakalım

Kod:
id(array2D[1,2])
Out[17]: 140600085331448

id(array2D[1,3])
Out[18]: 140600085331472

id(array2D[0,1])
Out[20]: 140600085331544

id(array2D[1,1])
Out[21]: 140600085331568


Sanırsam yeterince anlaşıldı. Şimdi kendi Dynamic Array Nesnemizi oluşturalım.


->Dynamic array boyutunu önceden belirtmek zorunda olmadığımız daha sonra eleman ekleyip çıkartabileceğimiz yapılara denir.
->Dynamic array büyütülebilir,genişletilebilir, üzerinde oynama yapılabilir.

Kod:
import ctypes # yeni array yaratmak icin kullanacagiz

class DynamicArray(object):
    
    # initialize (constructor)
    def __init__(self):
        self.n = 0 # eleman sayisi
        self.capacity = 1 # kapasite
        self.A = self.make_array(self.capacity) 
        
    def __len__(self):
        """
        return array icerisinde eleman sayisi
        """
        return self.n
    
    def __getitem__(self,k):
        """
        return index k'da ki eleman(value)
        """
        if not 0 <= k < self.n:
                return IndexError("k is out of bounds !")
        
        return self.A[k]
        
    def append(self,eleman):
        """
        array'e eleman ekler
        """
        
        # eger kapasite dolu ise kapasiteyi iki katina cikar
        if self.n == self.capacity:
            self._resize(2*self.capacity)
            
        self.A[self.n] = eleman # eleman ekleme
        self.n += 1 # eleman sayisi bir arttir
        
    def _resize(self,new_cap):
        """
        array kapasitesini arttir
        """
        
        B = self.make_array(new_cap)  # yeni array yap
        
        # eski array (A) icerisindeki degerleri yeni arraye(B) icine tasi
        for k in range(self.n):
            B[k] = self.A[k]
        
        self.A = B # arrayi guncelle
        self.capacity = new_cap # kapasite guncelle
    
    def make_array(self,new_cap):
        """
        return yeni array
        """
        return (new_cap*ctypes.py_object)()


Kod:
array1 = DynamicArray()

array1
Out[37]: <__main__.DynamicArray at 0x7fe000834278>

array1.append(1)

array1
Out[39]: <__main__.DynamicArray at 0x7fe000834278>

print(array1[0])
1

array1.append(2)

print(array1[1])
2

print(type(array1))
<class '__main__.DynamicArray'>
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.