2012-06-24 33 views
14

Numpy'de dizi yayını kurallarını anlamakta sorun yaşıyorum.Numpy dizisi yayın kuralları

Açıktır ki, aynı boyut ve şekildeki iki dizide öğe-bilge çoğaltması gerçekleştirirseniz, her şey yolundadır. Ayrıca, çok boyutlu bir diziyi bir skaler ile çarptığınızda çalışır. Bu anladım.

Ancak, farklı biçiminde iki N boyutlu diziniz varsa, yayın kurallarının tam olarak ne olduğu açık değildir. Bu documentation/tutorial, aşağıdakileri açıklar: Yayınlamak için, bir işlemdeki her iki dizidesonlandırma eksenlerinin boyutu aynı boyutta olmalıdır veya bunlardan biri bir olmalıdır.

Tamam, bu yüzden bir M x N dizide N atıfta bir eksen arka ile varsayalım. Yani, bu, iki 2B diziyi (matrisler) eşit sayıda sütunla çarpmaya çalışırsam işe yarayacak demektir? öyle değil hariç ... A ve B hem iki sütun var

>>> from numpy import * 
>>> A = array([[1,2],[3,4]]) 
>>> B = array([[2,3],[4,6],[6,9],[8,12]]) 
>>> print(A) 
[[1 2] 
[3 4]] 
>>> print(B) 
[[ 2 3] 
[ 4 6] 
[ 6 9] 
[ 8 12]] 
>>> 
>>> A * B 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: shape mismatch: objects cannot be broadcast to a single shape 

beri, bu işe sanırdım. Yani, muhtemelen "sondaki eksen" terimi ve N-boyutlu diziler için nasıl geçerli olduğu hakkında bir şey yanlış anlama. Benim örnek çalışmıyor ve ne "eksenini sondaki" ile kastedilen neden

Birisi açıklayabilir misiniz?

+1

Bu, yayın hakkında gerçekten iyi bir yorumdur, http://www.scipy.org/EricsBroadcastingDoc –

+0

"broadcasting" etiketi ekleyebilir misiniz? – denis

+0

@BiRico yorumunda bağlantı * şimdi * arşiv dökümü taşındı Acaba neden http://wiki.scipy.org/EricsBroadcastingDoc olduğunu. – iled

cevap

10

Eh, sondaki eksenler anlamı bağlantılı dokümantasyon sayfasından açıklanmıştır. farklı boyutlar numarası ile iki diziler varsa, o zaman bu durumda 2x3 yılında, sadece sondaki ortak boyutlarını karşılaştırmak, birini 1x2x3 ve diğer 2x3 söylüyorlar. Ancak, her iki diziniz de iki boyutluysa, ilgili boyutların eşit olması ya da bunlardan birinin 1 olması gerekir. Dizinin boyutu 1 olan boyutlara tekil denir ve dizi bunlar boyunca yayınlanabilir. Senin durumunda

sahip bir 2x2 ve 4x2 ve 4 != 2 ve ne 4 veya 21 eşittir, bu nedenle bu işe yaramaz.

+0

Başka bir deyişle, A' 'arasında' shape' B 'arasında' shape' bir sonek olmalıdır '1 (?) –

+1

değerini dikkate alarak,' '1' herhangi bir şeye eşittir '' ve 'şekil (A)' ya da 'şekil (B)' kelimelerinin birbirinin ekleri olabilir. – unkulunkulu

+1

aslında, sen 'boyutta ... x1x1x1x1x1x1x1x sonsuz boyutlu olarak herhangi dizinin bakabilirsiniz ..... xAxBxC' yüzden de diğerleriyle yayın yapılabilir lider' 1's, bir sürü var. Bu şekilde, bu soneki şeyleri unutabilirsiniz, sadece "1" demek bir şeye eşittir. – unkulunkulu

İlgili konular