random#
- scipy.sparse.random(m, n, density=0.01, format='coo', dtype=None, rng=None, data_rvs=None)[源代码]#
生成具有给定形状和密度的随机分布值的稀疏矩阵。
警告
此函数返回一个稀疏矩阵,而不是一个稀疏数组。建议使用
random_array
来利用稀疏数组的功能。- 参数:
- m, nint
矩阵的形状
- density实数,可选
生成矩阵的密度:密度等于 1 表示满矩阵,密度为 0 表示没有非零元素的矩阵。
- format字符串,可选
稀疏矩阵格式。
- 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 是一个整数,则使用一个新的
RandomState
实例,并使用 random_state 进行种子设置。如果 random_state 已经是
Generator
或RandomState
实例,则使用该实例。
在版本 1.15.0 中更改: 作为从使用
numpy.random.RandomState
过渡到numpy.random.Generator
的 SPEC-007 过渡的一部分,此关键字从 random_state 更改为 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)
或者我们可以从 sp.stats 样式 rvs 函数构建它
>>> 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)