scipy.sparse.

random#

scipy.sparse.random(m, n, density=0.01, format='coo', dtype=None, random_state=None, data_rvs=None)[源代码]#

生成给定形状和密度的稀疏矩阵,其中包含随机分布的值。

警告

从 numpy 1.17 开始,传递 np.random.Generator(例如 np.random.default_rng)到 random_state 会显著加快执行速度。

为了保持向后兼容性,默认使用速度更慢的实现。

警告

此函数返回一个稀疏矩阵,而不是稀疏数组。建议使用 random_array 充分利用稀疏数组功能。

参数:
m, nint

矩阵的形状

densityreal, 可选

生成矩阵的密度:密度等于 1 表示一个满矩阵,密度为 0 表示一个没有非零项的矩阵。

格式str,可选

稀疏矩阵格式。

dtypedtype,可选

返回值类型的矩阵值。

random_state{None、int、numpy.random.Generator
  • 如果 seed 为无 (或 np.random),将使用 numpy.random.RandomState 单例。

  • 如果 seed 为整数,将使用新 RandomState 实例,以 seed 为种子。

  • 如果 seed 已经是 GeneratorRandomState 实例,则使用该实例。

此随机状态将用于采样稀疏结构,但不一定会用于采样矩阵结构非零项的值。

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, random_state=rng)

为值提供采样器

>>> rvs = sp.stats.poisson(25, loc=10).rvs
>>> S = sp.sparse.random(3, 4, density=0.25, random_state=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, random_state=rng):
...     return random_state.standard_normal(size) ** 2
>>> S = sp.sparse.random(3, 4, density=0.25, random_state=rng,
...                      data_rvs=np_normal_squared)

或者我们可以从 sp.stats 样式 rvs 函数构建它

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

或者我们可以继承 sp.stats rv_continous 或 rv_discrete

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