是否有一种将矩阵的对角线更改为新的值列表的优雅方式, 等效于带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