Генерация случайных разреженных положительных полуопределенных матриц в Python - PullRequest
1 голос
/ 08 июля 2019

Я хочу создать случайные тестовые экземпляры для некоторого фрагмента кода, который использует разреженные положительные полуопределенные матрицы.

В Matlab есть функция sprandsym (n, плотность, rc), которая создает случайные разреженные симметричныематрицы с собственными значениями rc, поэтому неотрицательный вектор rc приводит к PSD-матрице.

Есть ли способ воссоздать эту функцию в python?

Я нашел различные решения для создания случайной разреженной матрицыили случайная матрица PSD.Я также нашел решение для комбинации обоих путем создания случайной разреженной матрицы и, если это не PSD, добавления единичной матрицы до тех пор, пока она не станет PSD (а именно абсолютное значение наименьшего времени собственных значений).Но это решение создает диагонально доминирующие матрицы, которых, к сожалению, недостаточно для моих необходимых тестовых экземпляров.

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете использовать функцию, предоставленную этим ответом , которая опирается на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...