random_array#
- scipy.sparse.random_array(shape, *, density=0.01, format='coo', dtype=None, random_state=None, data_sampler=None)[源代码]#
返回一个[0, 1)之间均匀随机数的稀疏数组
返回具有给定形状和密度的稀疏数组,其中值在 [0, 1) 范围内随机生成。
警告
从 numpy 1.17 开始,传递
np.random.Generator
(例如np.random.default_rng
)作为random_state
将导致更快的执行时间。默认使用更慢的实现以保持向后兼容性。
- 参数:
- shape整型或整型元组
数组的形状
- density实数,可选(默认值:0.01)
生成矩阵的密度:密度等于 1 表示满矩阵,而密度为 0 表示没有非零项的矩阵。
- formatstr,可选(默认值为“coo”)
稀疏矩阵格式。
- dtypedtype,可选(默认值为 np.float64)
返回的矩阵值的类型。
- random_state{None、整数、生成器、随机状态},可选
确定非零结构的随机数生成器。建议对每次调用手动提供一个
numpy.random.Generator
,因为它比 RandomState 快得多。如果 None(或 np.random),将使用
numpy.random.RandomState
单例。如果为整数,将使用带有整数种子的新
生成器
实例。如果为
生成器
或随机状态
实例,则使用该实例。
此随机状态将用于抽样 索引(稀疏结构),默认情况下也用于数据值(请参见 data_sampler)。
- data_sampler可调用函数,可选(默认值取决于 dtype)
用关键字自变量 size 对随机数据值进行抽样的器。此函数应采用指定其返回的 ndarray 长度的单个关键字自变量 size。除非 dtype 为整数(从该 dtype 中默认均匀的整数)或复数(在复平面中默认在单位平方上均匀分布),否则该函数用于在选择这些值的所在位置后生成矩阵中的非零值。对于这些, random_state 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, random_state=rng)
提供值抽样器
>>> rvs = sp.stats.poisson(25, loc=10).rvs >>> S = sp.sparse.random_array((3, 4), density=0.25, ... random_state=rng, data_sampler=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_array((3, 4), density=0.25, random_state=rng, ... data_sampler=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_array((3, 4), density=0.25, random_state=rng, ... data_sampler=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().rvs >>> S = sp.sparse.random_array((3, 4), density=0.25, ... random_state=rng, data_sampler=Y)