Python’da iki boyutlu array nasıl tanımlanır?

Aşağıdaki gibi başlangıç boyutu olmayan iki boyutlu bir dizi tanımlamak isteyelim: Bunu yapmak işe yaramayacaktır.

Aşağıdaki gibi başlangıç boyutu olmayan iki boyutlu bir dizi tanımlamak isteyelim:

Matrix = [][]

Bunu yapmak işe yaramayacaktır..

Başlangıç boyutu vermeyi denemek de yine yanlış olacak ve hata verecek:

Matrix = [5][5]

Hata:

Traceback ...
IndexError: list index out of range

Peki python’da iki boyutlu bir array nasıl oluştururuz?


Teknik olarak başlatılmamış bir diziyi diziye eklemeye çalışıyoruz. Öğeleri eklemeden önce dış listeyi listelerle başlatmamız gerekir; Python buna “list comprehension” adını verir.

# 5 listesi olan ve her birinde 8 öğesi olan, her biri 0'a eşitlenmiş liste oluşturur
w, h = 8, 5
Matrix = [[0 for x in range(w)] for y in range(h)] 

#artık listeye öğe ekleyebiliriz:

Matrix[0][0] = 1
Matrix[6][0] = 3 # hata! range... 
Matrix[0][6] = 3 # uygun

Matrisin “y” adresinin majör olduğunu, başka bir deyişle, “y indexi” nin “x indexi” nden önce geldiğini unutmayın.

print Matrix[0][0] # Çıktı 1
x, y = 0, 6 
print Matrix[x][y] # Çıktı 3; index'e dikkat! 

Bunları istediğiniz gibi adlandırabilseniz de, hem iç hem de dış listeler için “x” kullanırsanız ve kare olmayan bir Matris istiyorsanız, dizine eklemede ortaya sorunlar çıkabilir. Bu yüzden farklı isimlendirmeleri kullanmanız yararlı olur.

Aşağıda, listelerin listesini oluşturmak için daha kısa bir gösterim verilmiştir:

matrix = [[0]*5 for i in range(5)]

Ne yazık ki bundan daha kısa bir şeye, mesela 5*[5*[0]]‘e, kısaltmak işe yaramaz çünkü bu, aynı listenin 5 kopyasını oluşturur. Bu yüzden öğelerden birini değiştirdiğinizde hepsi değişir

>>> matrix = 5*[5*[0]]
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[4][4] = 2
>>> matrix
[[0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2]]

Boş bir matris oluşturmak istiyorsanız, doğru söz dizimi aşağıdaki gibi olacaktır:

matrix = [[]]

Gerçekten bir matris istiyorsanız numpy kullanabilirsiniz. Matris işlemleri çoğunlukla iki boyutlu bir dizi türü kullanır. Yeni bir dizi oluşturmanın birçok yolu bulunur; En kullanışlı olanlardan biri, bir boyut parametresi alan ve verilen boyutun bir dizisini döndüren ve değerleri sıfıra başlatılan zeros işlevdir:

>>> import numpy
>>> numpy.zeros((5, 5))
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

İki boyutlu diziler ve matrisler oluşturmanın diğer bazı yolları da aşağıdaki gibi olacaktır

numpy.arange(25).reshape((5, 5))         # 1-B oluştur ve yeniden boyutlandır
numpy.array(range(25)).reshape((5, 5))   # Python range'i ver ve yeniden boyutlandır
numpy.array([5] * 25).reshape((5, 5))    # Python listesi ver ve yeniden boyutlandır
numpy.empty((5, 5))                      # ayır, ama oluşturma
numpy.ones((5, 5))                       # sıfırlarla oluştur

numpy ayrıca bir matrix türü de sağlar, ancak artık kullanımı önerilmemektedir ve gelecekte kaldırılabilir.

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python’da uzantı olmadan dosya adı nasıl elde edilir?

Python’daki bir dosya yolundan uzantıyı çıkartıp dosya adı elde etmeye çalışalım.

Python101 – Programlama Bilmeyenler için Python

Daha önce hiç programlama görmedim, Python öğrenebilir miyim? Bu eğitimde ilerledikçe programlamanın nasıl olduğunu Python üzerinden öğretmeye çalışacağız.

Python’da küçük harfler nasıl tespit edilir?

Diyelim ki aşağıdaki gibi bir program yazmaya başladık: Dize s içindeki küçük harfleri nasıl algılayabiliriz? Bir karakterin küçük harf olup olmadığını denetlemek için islower fonksiyonunu kullanabiliriz.

Python101 – Modülleri Kullanma

Bu bölüm için bir alıştırma ile başlayalım.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.