C'è un modo elegante per modificare le diagonali di una matrice in un nuovo elenco di valori, l'equivalente di Band con Sparray?Modifica delle diagonali di una matrice con Mathematica
Dire che ho la seguente matrice (vedi sotto)
(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm
e mi piacerebbe cambiare la diagonale principale al seguente per ottenere "nuovi mat" (vedi sotto)
newMainDiagList = [email protected][Subscript[new, ##] &, {1, 4}]
So che è facile cambiare la diagonale principale con un valore dato usando ReplacePart. Ad esempio:
ReplacePart[mat, {i_, i_} -> 0]
Vorrei anche non essere limitato alla diagonale principale (nello stesso modo in cui Band non è così limitato mediante SparseArray)
(Il metodo che uso al momento è di seguito!)
([email protected][Band[{1, 1}] -> newMainDiagList] +
ReplacePart[mat, {i_, i_} -> 0]) // MatrixForm
(output desiderato è 'nuovo mat')
Grazie! Ho imparato molto dalla tua risposta. Mi piace particolarmente ReplacePart [mat, {i_, i_}:> newDiagList [[i]]]. Mi piacciono molto anche i tuoi metodi per imitare il comportamento di Band, che trovo estremamente utile (per non dire altro). Suppongo che avrei dovuto individuare DiagonalMatrix. – tomd
Su argomenti non correlati, il tuo nome utente suona come RickRoll'er. – Margus
Leonid Shifrin utilizza MapTherad/ReplacePart, come segue: MapThread [ReplacePart, {mat, newMainDiagList, Range [4]}]. (Vedi Mathematica Programming. Un'introduzione avanzata, da LS a www.mathprogramming-intro.org/read_online.html) – tomd