Gibt es eine elegante Möglichkeit, die Diagonalen einer Matrix in eine neue Liste von Werten zu ändern, die Entsprechung von Band mit SparseArray?Ändern der Diagonalen einer Matrix mit Mathematica
sagen, dass ich die folgende Matrix (siehe unten)
(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm
und ich möchte die Hauptdiagonale auf die folgende bekommen „neue Matte“ (siehe unten)
newMainDiagList = [email protected][Subscript[new, ##] &, {1, 4}]
ändern
Ich weiß, dass es einfach ist, die Hauptdiagonale mit ReplacePart auf einen bestimmten Wert zu ändern. Zum Beispiel:
ReplacePart[mat, {i_, i_} -> 0]
Ich würde auch auf die Hauptdiagonale beschränkt werden (in der gleichen Art und Weise, dass Band ist nicht so mit SparseArray beschränkt) wie nicht
(Die Methode, die ich im Moment verwenden ist folgende!)
([email protected][Band[{1, 1}] -> newMainDiagList] +
ReplacePart[mat, {i_, i_} -> 0]) // MatrixForm
(gewünschte Ausgabe ist 'neue Matte')
Danke! Ich habe viel von deiner Antwort gelernt. Ich mag besonders ReplacePart [mat, {i_, i_}:> newDiagList [[i]]]. Ich mag auch Ihre Methoden sehr, um das Verhalten von Band nachzuahmen, was ich äußerst nützlich finde (um es gelinde auszudrücken). Ich behaupte, ich hätte DiagonalMatrix entdecken sollen. – tomd
Zum nicht verwandten Thema klingt Ihr Benutzername wie RickRoll'er. – Margus
Leonid Shifrin verwendet MapTerad/ReplacePart wie folgt: MapThread [ReplacePart, {mat, newMainDiagList, Range [4]}]. (Siehe Mathematica Programming. Eine erweiterte Einführung, von LS unter www.mathprogramming-intro.org/read_online.html) – tomd