Garfield
YZF Admin
numpy.squeeze, uzunluğu 1 olan boyutları kaldırır; başka uzunluktaki boyutlara dokunmaz. Örneğin (1, 3, 1, 5) şekilli bir dizi, eksen belirtilmezse (3, 5) şekline dönüşür. Belirli bir ekseni kaldırmak istiyorsanız axis parametresini kullanabilirsiniz; seçtiğiniz eksenin uzunluğu 1 değilse işlem hata verir.squeeze neyi değiştirir?
Bir NumPy dizisinin boyut yapısı
shape ile gösterilir. squeeze, yalnızca boyut uzunluğu tam olarak 1 olan eksenleri kaldırır. Boyut sayısını rastgele azaltmaz ve uzunluğu 1 olmayan eksenleri birleştirmez.Varsayımsal bir örnekte dizinin şekli
(1, 3, 1, 5) olsun. İlk eksenin uzunluğu 1, üçüncü eksenin uzunluğu da 1 olduğu için bu eksenler kaldırılır. Sonuç (3, 5) olur; 3 ve 5 uzunluklu eksenler korunur.
Python:
import numpy as np
veri = np.zeros((1, 3, 1, 5))
sonuc = np.squeeze(veri)
print(veri.shape)
print(sonuc.shape)
Beklenen çıktı şöyledir:
Kod:
(1, 3, 1, 5)
(3, 5)
Bu sonuç, verinin 3 ve 5 uzunluklu eksenlerinin silindiği anlamına gelmez; yalnızca uzunluğu 1 olan iki eksen kaldırılmıştır.
squeeze değerleri yeniden hesaplamaz, dizinin boyut yapısını sadeleştirir.Belirli bir boyutu kaldırma
Tüm uzunluğu 1 olan eksenleri kaldırmak istemiyorsanız
axis belirtin. axis=0, ilk ekseni; axis=1, ikinci ekseni ifade eder. Negatif eksen numaraları da sondan sayılır.
Python:
import numpy as np
veri = np.zeros((1, 3, 1, 5))
ilk_eksen_kaldirildi = np.squeeze(veri, axis=0)
ucuncu_eksen_kaldirildi = np.squeeze(veri, axis=2)
print(ilk_eksen_kaldirildi.shape)
print(ucuncu_eksen_kaldirildi.shape)
Çıktı:
Kod:
(3, 1, 5)
(1, 3, 5)
Burada yalnızca seçilen eksen kaldırılmıştır. Örneğin
axis=0 kullanıldığında üçüncü eksenin uzunluğu 1 olsa bile korunur.Önemli ayrım:
axis ile belirtilen eksenin uzunluğu 1 değilse NumPy o ekseni kaldıramaz ve hata üretir. Bu nedenle aşağıdaki kullanım geçerli değildir:
Python:
import numpy as np
veri = np.zeros((2, 3, 1))
sonuc = np.squeeze(veri, axis=0)
İlk eksenin uzunluğu 2 olduğu için
axis=0 kaldırılamaz. Bu durumda ya gerçekten uzunluğu 1 olan ekseni belirtin:
Python:
sonuc = np.squeeze(veri, axis=2)
print(sonuc.shape) # (2, 3)
ya da tüm uzunluğu 1 olan eksenleri kaldırmak istiyorsanız
axis parametresini vermeyin.Sık karıştırılan şekil sonuçları
Aşağıdaki örneklerde hangi eksenlerin kaldırıldığı görülebilir:
| Başlangıç şekli | Kullanım | Sonuç şekli |
|---|---|---|
| (1, 4, 1) | np.squeeze(x) | (4,) |
| (1, 4, 1) | np.squeeze(x, axis=0) | (4, 1) |
| (1, 4, 1) | np.squeeze(x, axis=2) | (1, 4) |
| (2, 4, 1) | np.squeeze(x) | (2, 4) |
| (2, 4, 1) | np.squeeze(x, axis=0) | Hata |
axis=0 kullanılamaz. Buna karşılık eksen belirtilmeden yapılan işlem yalnızca sondaki uzunluğu 1 olan ekseni kaldırır ve (2, 4) sonucunu verir.Bir boyutu korumak gerekiyorsa
Bazen bir eksenin uzunluğu 1 olsa bile onu korumak gerekir. Örneğin bir dizinin iki boyutlu kalması, yayınlama kurallarının veya bir fonksiyonun beklediği giriş biçiminin bozulmaması için önemli olabilir. Böyle bir durumda
np.squeeze(x) kullanmak yerine yalnızca güvenle kaldırmak istediğiniz ekseni axis ile belirtin ya da hiç sıkıştırma yapmayın.Örneğin
(1, 4, 1) şekilli bir dizide tüm tek uzunluklu eksenleri kaldırmak (4,) üretir. Yalnızca ilk ekseni kaldırmak ise (4, 1) üretir. Dolayısıyla işlemden sonra beklediğiniz şekli print(x.shape) ile kontrol edin; squeeze, verinin anlamını otomatik olarak yorumlamaz ve hangi eksenin uygulamanız için önemli olduğunu bilemez.
Son düzenleme: