Numpy dizisi yayınında aşağıdaki alıştırmaları göz önünde bulundurun.Numpy, python: yayın sırasında dizilerin boyutlarını otomatik olarak genişlet
import numpy as np
v = np.array([[1.0, 2.0]]).T # column array
A2 = np.random.randn(2,10) # 2D array
A3 = np.random.randn(2,10,10) # 3D
v * A2 # works great
# causes error:
v * A3 # error
Ben yayın için Numpy kurallarını biliyorum ve Matlab bsxfun
işlevselliği ile tanıdık. Bir (2, N, N) dizisine bir (2,1) dizisini göndermeyi denemenin neden başarısız olduğunu ve (2,1) dizisini bundan önce bir (2,1,1) diziye yeniden eklemem gerektiğini anlıyorum. yayın geçer.
Soruma şudur: Python'u yayınlamaya çalışırken dizinin boyutlarını otomatik olarak doldurması için herhangi bir yol var mı?
aksi takdirde ben aptal ve mult_v_A = lambda v,A: v.reshape([v.size] + [1]*(A.ndim-1)) * A
gibi saçma çirkin bir şey yapabileceğini --- o karşı yayınlanacak olacak çok boyutlu dizi (2,1) vektörü için açıkça çift istemiyoruz . "A" dizisi 2D veya 3D veya N-D olacaksa, zamanın önünde bilmiyorum. Matlab'ın bsxfun
yayın işlevselliği, boyutları gerektiği gibi zımbalı bir şekilde pedler, bu yüzden Python'da yapabileceğim bir şey olduğunu umuyorum. Numpe yayıncılık, sol tarafta ek eksenler ekler.
Görünümüm, bunun bir özellik değil, bir hata olmasıdır. Örneğin, 2’de 1 sütun vektörüne sahip olduğunuzu varsayalım ve daha sonra 2'ye 2’lik bir 'ndarray’ınız vardı. “V” şeklini yeniden şekillendirmek istiyor musunuz (2,1,1) veya şekil (1,2,1) 'dir? Boyutları sadece doldurursanız, kullanıcı için belirsiz olabilir. Açık bir yeniden biçimlendirmeyi zorlamak daha iyi bir genel prosedürdür ve kullanıcının sabit bir sözleşmesi varsa, otomatik olarak yeniden şekillendirmek için özel bir işlev yazması için kullanıcıya bırakır. Ama size bir kongre zorlayan küresel bir "numpy" boyut-padder yapmak için iyi değil. Kötüye kullanmak çok kolay olurdu. – ely
-1 @EMS. Bu belirsizlik, tekil olmayan ilk boyutun yayında kullanılacağını belirterek kolayca çözülebilir. "Bu yol daha iyi" şeklindeki bu tutum, profesyonel programcılar ve uygulamalı matematikçiler tarafından kullanılan sistemler için tamamen uygunsuzdur - bu bir özellik değil, okunaksızlık ve zorunluluk açısından bir kusurdur. –
-1 @ Ahmed Fasih. Her gün bilimsel uygulamalar için Python kodunu yazan bir uygulamalı matematik uzmanıyım ve önerilen tekil olmayan tekil boyutu her zaman benimseme önerisinin çok zayıf olacağını düşünüyorum. Bu konvansiyonu benimseyen bir fonksiyon yazmanız için, NumPy geliştiricilerin, bazı kullanıcılara (sizin gibi) fayda sağlayan ama diğer bazı kullanıcılar (benim gibi) için yararlı olmayacak bir kongre gibi bir kodlamayı endişelendirmekten çok daha iyi. – ely