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