我希望为某些代码创建随机测试实例,这些代码依赖于稀疏的正半定矩阵。
Matlab具有sprandsym(n,density,rc)函数,该函数创建特征值rc的随机稀疏对称矩阵,因此非负向量rc导致PSD矩阵。
有没有办法在python中重新创建此功能?
我发现了创建随机稀疏矩阵或随机PSD矩阵的各种解决方案。我还找到了一种解决方案,可以通过创建一个随机的稀疏矩阵来解决这两种问题,如果不是PSD,则添加单位矩阵直到它成为PSD(即最小特征值时间的绝对值)。但是此解决方案会创建对角占优矩阵,但不幸的是,这对于我所需的测试实例而言还不够。
答案 0 :(得分:0)
您可以使用this answer提供的功能,该功能依赖于scipy
和numpy
并应为您提供所需的信息:
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