Wie subtrahiert jedes Element der matrix die aus jeder Zeile entsprechend der anderen matrix
A = [1 2 3; 7 6 5]
B = [3 7];
A-B = [1-3 2-3 3-3; 7-7 6-7 5-7];
ans =[-2 -1 0; 0 -1 -2]
Dies ist der Betrieb, die ich gemacht haben wollen. Wie konnte ich es tun, matrix-Funktionen, andere als die iterative Lösungen?
- wird jemand die Lösung posten, sehr schnell, aber check-out
repmat
(mathworks.com/help/matlab/ref/repmat.html) in der Zwischenzeit. Eine sehr nützliche Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies tun Sie am besten bequem mit
bsxfun
, die automatisch erweitert die arrays entsprechen in der Größe (so dass Sie nicht brauchen, zu verwendenrepmat
). Beachten Sie, dass ich umgesetzt werden müssenB
so, dass es ein 2-für-1-array.Ich denke, dass Jonas Antwort ist die beste. Aber nur für das Protokoll, hier ist die Lösung mit einer expliziten
repmat
:Ist nicht nur Jonas' Antwort einfacher, es ist tatsächlich schneller mit einem Faktor von 2 für große Matrizen auf meinem Rechner.
Es ist auch interessant zu beachten, dass in dem Fall, wo a ist Ein n-d-array, beide Lösungen haben etwas durchaus sinnvoll. Die matrix
C
haben die folgende Eigenschaft:In der Tat, Jonas' Antwort ausgeführt wird, und sehr wahrscheinlich das tun, was Sie wollen, in dem Fall, wo B ist m-d, solange die ursprünglichen Dimensionen der
A
undB'
haben die gleiche Größe. Sie können ändern Sie die repmat Lösung zu imitieren, das ... an welcher Stelle Sie beginnen zu implementierenbsxfun
!bsxfun
versusrepmat
Lösungen.Normalerweise können Sie nicht. Iterative Lösungen notwendig sein wird, denn das problem ist schlecht definiert. Matrix-addition/Subtraktion ist nur definiert für Matrizen die gleichen Abmessungen.
ie:
Macht es keinen Sinn, zu subtrahieren eine 1x2-matrix aus einer 2x3-matrix.
Jedoch, wenn Sie multipliziert B durch einige intermediate matrix das Ergebnis einer 2x3-matrix, die funktionieren würde, sprich:
zB:
Daher
A-B'*Y
gibt einen gültigen, nicht-iterative Lösung.Der einzige "cheat" hier ist der Einsatz der
diag()
Funktion wandelt einen Vektor in eine streng-diagonal-matrix. Gibt es eine Möglichkeit manuell zu zerlegen, eine Reihe von matrix-Vektor-Multiplikationen manuell neu erstellen Sie diediag()
- Funktion, aber das wäre mehr Arbeit als meine Lösung vor sich.Glück!