是否有一種將矩陣的對角線更改爲新的值列表的優雅方式, 等效於帶SparseArray的Band?用Mathematica更改矩陣的對角線
說我有以下矩陣(見下文)
(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm
,我想給主對角線更改爲以下獲得「新的墊子」(見下文)
newMainDiagList = [email protected][Subscript[new, ##] &, {1, 4}]
我知道使用ReplacePart將主對角線更改爲給定值很容易。例如:
ReplacePart[mat, {i_, i_} -> 0]
我也會喜歡不被限制在主對角線(以同樣的方式,帶不那麼與SparseArray限制)
(我目前使用的方法是下面!)
([email protected][Band[{1, 1}] -> newMainDiagList] +
ReplacePart[mat, {i_, i_} -> 0]) // MatrixForm
(所需的輸出是 '新墊')
謝謝!我從你的回覆中學到了很多東西。我特別喜歡ReplacePart [mat,{i_,i_}:> newDiagList [[i]]]。我也非常喜歡你的方法來模仿樂隊的行爲,我發現它非常有用(至少可以說)。我假設我應該發現DiagonalMatrix。 – tomd 2010-11-11 20:38:21
在不相關的主題上,您的用戶名聽起來像RickRoll'er。 – Margus 2010-11-13 23:39:35
Leonid Shifrin使用MapTherad/ReplacePart,如下所示:MapThread [ReplacePart,{mat,newMainDiagList,Range [4]}]。 (請參閱www.mathprogramming-intro.org/read_online.html上的LS Mathematica編程。高級簡介) – tomd 2010-12-03 17:58:46