在Python中生成随机稀疏正半定矩阵

时间:2019-07-08 13:03:27

标签: python matlab

我希望为某些代码创建随机测试实例,这些代码依赖于稀疏的正半定矩阵。

Matlab具有sprandsym(n,density,rc)函数,该函数创建特征值rc的随机稀疏对称矩阵,因此非负向量rc导致PSD矩阵。

有没有办法在python中重新创建此功能?

我发现了创建随机稀疏矩阵或随机PSD矩阵的各种解决方案。我还找到了一种解决方案,可以通过创建一个随机的稀疏矩阵来解决这两种问题,如果不是PSD,则添加单位矩阵直到它成为PSD(即最小特征值时间的绝对值)。但是此解决方案会创建对角占优矩阵,但不幸的是,这对于我所需的测试实例而言还不够。

1 个答案:

答案 0 :(得分:0)

您可以使用this answer提供的功能,该功能依赖于scipynumpy并应为您提供所需的信息:

def sprandsym(n, density):
    rvs = stats.norm().rvs
    X = sparse.random(n, n, density=density, data_rvs=rvs)
    upper_X = sparse.triu(X) 
    result = upper_X + upper_X.T - sparse.diags(X.diagonal())
    return result