Garfield
YZF Admin
expand_dims ne yapar?
NumPy’de yeni eksen eklemek içinnp.expand_dims(dizi, axis) kullanılır. Dizi içindeki değerler değişmez; yalnızca şekle bir boyut eklenir. Örneğin şekli (3,) olan bir diziyi axis=0 ile (1, 3), axis=1 ile (3, 1) şekline dönüştürebilirsiniz. Sonucu kesin olarak görmek için .shape özelliğini kontrol edin.Temel kullanım
Ön koşul olarak NumPy’nin kurulu olduğu bir Python ortamında çalışmanız gerekir. Aşağıdaki örnek, üç elemanlı tek boyutlu dizinin iki farklı konumuna yeni eksen ekler:
Python:
import numpy as np
dizi = np.array([10, 20, 30])
satir = np.expand_dims(dizi, axis=0)
sutun = np.expand_dims(dizi, axis=1)
print(dizi.shape)
print(satir)
print(satir.shape)
print(sutun)
print(sutun.shape)
Beklenen çıktı şöyledir:
Kod:
(3,)
[[10 20 30]]
(1, 3)
[[10]
[20]
[30]]
(3, 1)
Burada
axis=0 başa yeni eksen ekler. Dizi tek satırlık iki boyutlu bir yapı gibi görünür. axis=1 ise mevcut eksenin sonrasına yeni eksen ekler ve sonuç sütun biçimine gelir. Her iki işlemde de değerlerin sırası ve sayısı aynıdır.axis değeri nasıl seçilir?
axis parametresi, yeni eksenin ekleneceği konumu belirtir. Eksenler sıfırdan sayılır; negatif değerler ise sondan sayma olanağı verir.
Python:
import numpy as np
dizi = np.array([[1, 2], [3, 4]])
for eksen in (0, 1, 2, -1):
sonuc = np.expand_dims(dizi, axis=eksen)
print(eksen, sonuc.shape)
Bu örnekte başlangıç şekli
(2, 2) olduğu için her sonuçta toplam üç eksen bulunur:| axis | Yeni şekil | Yorum |
|---|---|---|
| 0 | (1, 2, 2) | Yeni eksen en başa eklenir. |
| 1 | (2, 1, 2) | Yeni eksen mevcut ilk eksenden sonra eklenir. |
| 2 | (2, 2, 1) | Yeni eksen sona eklenir. |
| -1 | (2, 2, 1) | Yeni eksen son konuma eklenir. |
axis=0 ve axis=-1 aynı sonucu vermez; biri başa, diğeri sona ekler. Eksen konumu, özellikle matris çarpımı, yayınlama kuralları ve makine öğrenmesi modellerine veri hazırlama sırasında önemlidir.expand_dims yerine hangi kısa yazım kullanılabilir?
Tek bir eksen ekleyecekseniz köşeli parantezle indeksleme de aynı şekil dönüşümünü yapabilir:
Python:
import numpy as np
dizi = np.array([10, 20, 30])
print(dizi[None, :].shape) # (1, 3)
print(dizi[:, None].shape) # (3, 1)
np.expand_dims daha açık ve eksen numarasını doğrudan belirttiği için fonksiyon içinde veya genel amaçlı kodda okunabilirliği artırır. None ya da np.newaxis kullanımı ise kısa ve yerel dönüşümlerde pratiktir. Her iki yaklaşım da verileri kopyalayıp yeniden düzenlemekten çok, yeni bir eksen boyutu ekleme amacı taşır; aritmetik değerleri otomatik olarak toplamaz, sıralamaz veya yeniden şekillendirme gerektiren her durumu çözmez.Yaygın hata: eksen numarasını yanlış vermek
Bir dizininndim değeri mevcut eksen sayısını gösterir. Yeni eksenin geçerli konumunu seçerken bu bilgiyi kontrol edebilirsiniz:
Python:
import numpy as np
dizi = np.zeros((2, 3))
print(dizi.ndim) # 2
print(np.expand_dims(dizi, axis=2).shape) # (2, 3, 1)
Sonucun beklediğiniz yerde oluşup oluşmadığını
.shape ile doğrulayın. axis değeri izin verilen aralığın dışındaysa NumPy eksen hatası verir; böyle bir durumda önce başlangıç şeklini ve ndim değerini yazdırın, ardından yeni eksenin başta mı, ortada mı, sonda mı olması gerektiğine göre axis değerini düzeltin.