具有给定特征值和特征向量的随机正半定矩阵

时间:2018-03-30 12:12:19

标签: python numpy scipy linear-algebra gaussian

有没有办法在Python中生成具有给定特征值和特征向量的随机正半定矩阵?

我查看this,但他们不允许为矩阵构造指定特征值。

上下文:我想生成具有受控椭圆度的随机多元高斯,并且因为分布的长轴/短轴具有与特征值成比例的长度,我希望我的协方差矩阵具有它们。 Definiton could be found here (page 81)

1 个答案:

答案 0 :(得分:2)

当你没有特征向量但只想要一些特征值时,你可以列出你想要的特征值并使用正交矩阵来混淆它们。由于同余变换不会改变矩阵的惯性(很好地达到数值精度),因此可以使用随机矩阵的QR分解的Q矩阵(或任何其他方式来生成正交矩阵)。

import numpy as np
import scipy.linalg as la
des = [1, 0, 3, 4, -2, 0, 0]
n = len(des)
s = np.diag(des)
q, _ = la.qr(np.random.rand(n, n))
semidef = q.T @ s @ q
np.linalg.eigvalsh(semidef)

给出

array([-2.00000000e+00, -2.99629568e-16, -5.50063275e-18,  2.16993906e-16,
        1.00000000e+00,  3.00000000e+00,  4.00000000e+00])

当你真正拥有特征向量时,你可以简单地构造原始矩阵,这是特征值分解的定义。