¿Existe una forma elegante de cambiar las diagonales de una matriz a una nueva lista de valores, el equivalente de Band with SparseArray?Cambiar las diagonales de una matriz con Mathematica
Decir que tengo la siguiente matriz (véase más adelante)
(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm
y me gustaría cambiar la diagonal principal de la siguiente llegar "mat" (véase más adelante)
newMainDiagList = [email protected][Subscript[new, ##] &, {1, 4}]
Sé que es fácil cambiar la diagonal principal a un valor determinado utilizando ReplacePart. Por ejemplo:
ReplacePart[mat, {i_, i_} -> 0]
También me gustaría no estar restringido a la diagonal principal (de la misma manera que la banda no es tan restringido con SparseArray)
(el método que utilizo en este momento es la siguiente!)
([email protected][Band[{1, 1}] -> newMainDiagList] +
ReplacePart[mat, {i_, i_} -> 0]) // MatrixForm
(salida deseada es 'nueva estera')
Gracias! Aprendí mucho de tu respuesta. Particularmente me gusta ReplacePart [mat, {i_, i_}:> newDiagList [[i]]]. También me gustan mucho sus métodos para imitar el comportamiento de Band, que considero extremadamente útil (por decir lo menos). Supongo que debería haber visto DiagonalMatrix. – tomd
En un tema no relacionado, su nombre de usuario suena como RickRoll'er. – Margus
Leonid Shifrin utiliza MapTherad/ReplacePart, de la siguiente manera: MapThread [ReplacePart, {mat, newMainDiagList, Range [4]}]. (Consulte la Programación de Mathematica. Una introducción avanzada, por LS en www.mathprogramming-intro.org/read_online.html) – tomd