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.RandomStatetonumpy.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)