我有一个向量X
,是这样创建的:
from sympy import *
x1 = Symbol('x1')
x2 = Symbol('x2')
x3 = Symbol('x3')
X = Matrix([x1, x2, x3])
我还有一个矩阵myMat
,其中只包含数字1:
myMat = ones(3, 3)
Matrix([
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
现在我想用我的向量X
替换矩阵的对角线;我想要的结果看起来像这样:
Matrix([
[x1, 1, 1],
[1, x2, 1],
[1, 1, x3]])
当然,我可以使用for循环来完成:
for ind, el in enumerate(X):
myMat[ind, ind] = el
但我想知道是否有更聪明的方法来直接访问这个矩阵的对角线。虽然我可以计算矩阵的迹,但我找不到一种用类似于
myMat.diag = X
的方式替换对角线元素的方法。有没有办法做到这一点?编辑
@Emilien给了我正确的方向,因此我接受了这个答案。在此答案的基础上,我还发布了自己的解决方案,它利用了
sympy
和numpy
,并在一行中解决了问题:我的答案。
1
,您可以使用反转的eye
矩阵(对角线上为0
,其他位置为1
)进行逐项乘法运算。 - Mathioui!=j
的情况,因此与for循环相比可能不是非常高效。 - Emilien