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
OR
Birden çok boyutlu:
f(x) fonksiyonu 5 elemanlı bir Arraydir.
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.
.
.
.
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
Ç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)
Bir de adreslerine bakalım
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.
İşte bunun için variable yerine arrayler kullanmamız gerekir.
Ram bellekte örnek saklanım:
Tek boyutlu
OR
Birden çok boyutlu:
Kod:
[1,2,3,4,5] = f(x)
Kod:
f(0) = 1
f(1) = 2
f(3) = 2
f(-1) = 5
f(-5)=1
Yani arrayimizin bir deki görüntüsü 2 dir.
Yani arrayimizin -1 deki görüntüsü 5 dir.
.
.
.
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)
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: