2016-11-29 18 views
2

Ich lief vor kurzem in das folgende Problem mit dem Senden mit numpy.Broadcasting (N,) und mit (N, 1) Arrays in numpy

y = randn(100) 
x = randn(100,1) 
(y+x).shape 
> 100,100 

Während ich erkennen, dass dies nach den Regeln von https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html ist, so scheint es unlogisch zu sein, was man erwarten würde -, dass das Ergebnis ein (100,1) Vektor sein.

Ich habe mich nur gefragt - gibt es einen guten Grund für dieses Verhalten (d. H. Das ist Verhalten wünschenswert) - oder ist es nur ein Nebenprodukt der Art und Weise Broadcasting-Regeln definiert sind.

+0

'y + x.T' kann Ihnen geben, was Sie wollen. –

Antwort

2

Die Grundidee ist, dass wenn das eine oder andere Array eine Iteration erfordert, damit die Ergebnisformen sinnvoll sind, dann iterativ die Operation für jeden Eintrag der Hauptachse durchführt (Separat bietet NumPy Möglichkeiten, die Iteration zu bewirken über verschiedene Achsen wenn gewünscht, wie mit einsum).

In diesem Fall hat x 100 verschiedene Dinge entlang seiner Hauptachse, von denen jede einzeln zu y hinzugefügt wird. Nehmen wir den ersten Wert x[0] und fügen ihn zu y hinzu. Jetzt reden wir über y mit 100 Sachen, die iterativ zu x[0] hinzugefügt werden, so ist das Ergebnis eine Form von y Sache. Wiederholen Sie dies für x[1] und so weiter.

Wenn Sie x.T tun, dann entlang x 's Hauptachse gibt es nur 1 Sache, nämlich eine Länge-100 "Zeile". Dann kann es elementar zu y ohne Änderung hinzugefügt werden, so dass keine Broadcasting mehr benötigt wird und Sie die "naive" Vektor-Mathe-Operation erhalten, die Sie vielleicht in Betracht gezogen haben.

NumPy Broadcasting-Regeln versuchen, für die Programmierung und Iteration über eine breite Palette von möglichen Berechnungen und Operationen wirksam zu sein, von denen viele absolut nichts mit linearer Algebra oder gemeinsamen Vektor/Matrix-Operationen zu tun haben. Rundfunk wird also nicht immer (und sollte nicht immer) Dinge annehmen, um die Art der Erwartung der linearen Algebra zu bevorzugen.

Verwandte Themen