代码之家  ›  专栏  ›  技术社区  ›  Laurynas Tamulevičius

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

  •  2
  • Laurynas Tamulevičius  · 技术社区  · 6 年前

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

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

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   percusse    6 年前

    当你没有特征向量,但只需要一些特征值时,你可以列出你想要的特征值,并使用正交矩阵把它们混在一起。由于同余变换不会改变矩阵的惯性(达到数值精度),因此可以使用随机矩阵的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])
    

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