Có cách nào thanh lịch để thay đổi đường chéo của ma trận thành danh sách giá trị mới, số tương đương với Băng với SparseArray không?Thay đổi đường chéo của ma trận bằng Mathematica
Nói rằng tôi có ma trận sau đây (xem dưới đây)
(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm
và tôi muốn thay đổi đường chéo chính như sau để có được "mat mới" (xem dưới đây)
newMainDiagList = [email protected][Subscript[new, ##] &, {1, 4}]
Tôi biết rất dễ để thay đổi đường chéo chính thành một giá trị đã cho bằng cách sử dụng ReplacePart. Ví dụ:
ReplacePart[mat, {i_, i_} -> 0]
Tôi cũng thích không được giới hạn trong đường chéo chính (trong cùng một cách mà ban nhạc không phải là quá hạn chế với SparseArray)
(Phương pháp tôi sử dụng vào lúc này là sau!)
([email protected][Band[{1, 1}] -> newMainDiagList] +
ReplacePart[mat, {i_, i_} -> 0]) // MatrixForm
(Output mong muốn là 'thảm mới')
Cảm ơn! Tôi đã học được rất nhiều từ câu trả lời của bạn. Tôi đặc biệt thích ReplacePart [mat, {i_, i_}:> newDiagList [[i]]]. Tôi cũng rất thích các phương pháp của bạn để bắt chước hành vi của Band, điều mà tôi thấy cực kỳ hữu ích (để nói ít nhất). Tôi cho là tôi nên phát hiện DiagonalMatrix. – tomd
Về chủ đề không liên quan, tên người dùng của bạn có vẻ như RickRoll'er. – Margus
Leonid Shifrin sử dụng MapTherad/ReplacePart, như sau: MapThread [ReplacePart, {mat, newMainDiagList, Range [4]}]. (Xem Lập trình Mathematica. Giới thiệu nâng cao, của LS tại www.mathprogramming-intro.org/read_online.html) – tomd