scipy.sparse.

random_array#

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

Возвращает разреженный массив равномерно случайных чисел в [0, 1)

Возвращает разреженный массив с заданной формой и плотностью, где значения генерируются равномерно случайно в диапазоне [0, 1).

Параметры:
shapeint или кортеж ints

форма массива

плотностьreal, optional (default: 0.01)

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

форматstr, опционально (по умолчанию: ‘coo’)

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

dtypedtype, опционально (по умолчанию: np.float64)

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

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 ключевое слово должно использоваться в новом коде.

Это случайное состояние будет использоваться для выборки indices (структура разреженности), и по умолчанию также для значений данных (см. data_sampler).

data_samplercallable, опционально (по умолчанию зависит от dtype)

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

Возвращает:
resразреженный массив

Примеры

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

>>> import numpy as np
>>> import scipy as sp
>>> rng = np.random.default_rng()

Стандартная выборка равномерно из [0, 1):

>>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng)

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

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

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

>>> def random_uint32_to_100(size=None):
...     return rng.integers(100, size=size, dtype=np.uint32)
>>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng,
...                            data_sampler=random_uint32_to_100)

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

>>> def np_normal_squared(size=None, rng=rng):
...     return rng.standard_normal(size) ** 2
>>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng,
...                            data_sampler=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_array((3, 4), density=0.25, rng=rng,
...                            data_sampler=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().rvs
>>> S = sp.sparse.random_array((3, 4), density=0.25,
...                            rng=rng, data_sampler=Y)