scipy.sparse.
随机#
- scipy.sparse.random(m, n, density=0.01, format='coo', dtype=None, random_state=None, data_rvs=None)[源代码][源代码]#
生成具有给定形状和密度的稀疏矩阵,其值随机分布。
警告
自 numpy 1.17 起,为
random_state
传递一个np.random.Generator``(例如 ``np.random.default_rng
)将导致更快的执行时间。为了向后兼容,默认使用了一个慢得多的实现。
警告
此函数返回一个稀疏矩阵 – 而不是稀疏数组。建议使用
random_array
以利用稀疏数组功能。- 参数:
- m, n整数
矩阵的形状
- 密度实数, 可选
生成矩阵的密度:密度等于1意味着一个满矩阵,密度为0意味着一个没有非零项的矩阵。
- 格式str, 可选
稀疏矩阵格式。
- dtypedtype, 可选
返回矩阵值的类型。
- random_state{None, int,}
如果 seed 是 None(或 np.random),则使用
numpy.random.RandomState
单例。如果 seed 是一个整数,将使用一个新的
RandomState
实例,并使用 seed 进行种子设定。如果 seed 已经是
Generator
或RandomState
实例,则使用该实例。
这个随机状态将用于采样稀疏结构,但不一定用于采样矩阵结构上非零条目的值。
- 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)