2017-05-05 5 views
2

Ich stolperte über ein unerwartetes Verhalten des Additionsoperators.Was soll (1 mal n) plus (n mal 1) Operation aufgerufen werden?

a=[1 2 3]; 
b=[5; 7; 11]; 
a+b 

Produziert

ans = 

    6  7  8 % a(1)+b(1) a(1)+b(2) a(1)+b(3) 
    8  9 10 % a(2)+b(1) a(2)+b(2) a(2)+b(3) 
    12 13 14 % a(3)+b(1) a(3)+b(2) a(3)+b(3) 

Dieses Verhalten fällt wahrscheinlich unter dem Add a Vector to a Matrix Beispiel in der Dokumentation.

Erstellen Sie ein Array, A, und fügen Sie einen Spaltenvektor hinzu. Der Vektor wird so behandelt, obwohl es sich um eine Matrix mit der gleichen Größe wie A ist, so dass jedes Element in dem Vektor einer Zeile in A. hinzugefügt wird

Obwohl b in meinem Beispiel kann nicht so behandelt werden, die gleiche Größe wie a. Beide Vektoren müssen dupliziert werden.

Was kann ich dieses Verhalten nennen, wenn ich es anderen schildere? Keine der Definitionen von Matrix Addition passen. Vector addition hat auch eine andere Definition. Das Beste, was mir einfiel, war die "Summe der Elemente im kartesischen Produkt".

Antwort

3

Das heißt binäre Singleton-Erweiterung. Ab R2016b führt MATLAB das automatisch mit Standardoperatoren durch. Weitere Details finden Sie unter bsxfun.

+0

Ich denke, bsxfun ist, wo ich aussehen würde, wenn ich dieses Verhalten wollte und ich wusste nicht, dass es existiert. Aber es ist überhaupt kein intuitiver Ort, um zu schauen, wenn Sie über das Verhalten stolpern und versuchen, es zu erklären. : P – Cecilia

+2

Auch implizite Erweiterung ... hier ist ein Blog-Post von Mathworks https://blogs.mathworks.com/loren/2016/11/10/more_thoughts_about_implicit_expansion/ – beaker

+3

Ups, hier ist das Original. http://blogs.mathworks.com/loren/2016/10/24/matlab-arithmetic-expands-in-r2016b/ – beaker