scipy.sparse.

random#

scipy.sparse.random(m, n, плотность=0.01, формат='coo', dtype=None, rng=None, data_rvs=None, *, random_state=None)[источник]#

Создать разреженную матрицу заданной формы и плотности со случайно распределёнными значениями.

Предупреждение

Эта функция возвращает разреженную матрицу, а не разреженный массив. Рекомендуется использовать random_array чтобы воспользоваться функциональностью разреженных массивов.

Параметры:
m, nint

форма матрицы

плотностьreal, optional

плотность генерируемой матрицы: плотность, равная единице, означает полную матрицу, плотность 0 означает матрицу без ненулевых элементов.

форматstr, optional

формат разреженной матрицы.

dtypedtype, опционально

тип возвращаемых значений матрицы.

rng{None, int, numpy.random.Generator, опционально

Если rng передается по ключевому слову, типы, отличные от numpy.random.Generator передаются в numpy.random.default_rng для создания экземпляра Generator. Если rng уже является Generator экземпляр, то предоставленный экземпляр используется. Укажите rng для повторяемого поведения функции.

Если этот аргумент передаётся по позиции или random_state передается по ключевому слову, устаревшее поведение для аргумента random_state применяется:

  • Если random_state равно None (или numpy.random), numpy.random.RandomState используется синглтон.

  • Если random_state является int, новый RandomState используется экземпляр, инициализированный с random_state.

  • Если random_state уже является Generator или RandomState экземпляр, тогда этот экземпляр используется.

Изменено в версии 1.15.0: В рамках SPEC-007 переход от использования numpy.random.RandomState to numpy.random.Generator, этот ключевое слово было изменено с random_state to rng. В переходный период оба ключевых слова будут продолжать работать, хотя только одно может быть указано за раз. После переходного периода вызовы функций, использующие random_state ключевое слово будет выдавать предупреждения. Поведение обоих random_state и rng описаны выше, но только rng ключевое слово должно использоваться в новом коде.

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

data_rvsвызываемый объект, необязательный

Выбирает заданное количество случайных значений. Эта функция должна принимать один аргумент, указывающий длину ndarray, который она вернет. Структурно ненулевые элементы разреженной случайной матрицы будут взяты из массива, выбранного этой функцией. По умолчанию будут выбираться равномерные случайные значения [0, 1) с использованием того же случайного состояния, что и для выбора структуры разреженности.

Возвращает:
resразреженная матрица

Смотрите также

random_array

создает разреженные массивы вместо разреженных матриц

Примеры

Передача np.random.Generator экземпляр для лучшей производительности:

>>> import scipy as sp
>>> import numpy as np
>>> rng = np.random.default_rng()
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng)

Предоставление сэмплера для значений:

>>> rvs = sp.stats.poisson(25, loc=10).rvs
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng, data_rvs=rvs)
>>> S.toarray()
array([[ 36.,   0.,  33.,   0.],   # random
       [  0.,   0.,   0.,   0.],
       [  0.,   0.,  36.,   0.]])

Создание пользовательского распределения. Этот пример создает квадрат нормального распределения из np.random:

>>> def np_normal_squared(size=None, rng=rng):
...     return rng.standard_normal(size) ** 2
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng,
...                      data_rvs=np_normal_squared)

Или мы можем построить его из функций rvs в стиле sp.stats:

>>> def sp_stats_normal_squared(size=None, rng=rng):
...     std_normal = sp.stats.distributions.norm_gen().rvs
...     return std_normal(size=size, random_state=rng) ** 2
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng,
...                      data_rvs=sp_stats_normal_squared)

Или мы можем создать подкласс sp.stats rv_continuous или rv_discrete:

>>> class NormalSquared(sp.stats.rv_continuous):
...     def _rvs(self,  size=None, random_state=rng):
...         return rng.standard_normal(size) ** 2
>>> X = NormalSquared()
>>> Y = X()  # get a frozen version of the distribution
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng, data_rvs=Y.rvs)