random_array#
- scipy.sparse.random_array(shape, *, density=0.01, format='coo', dtype=None, rng=None, data_sampler=None)[源代码]#
返回一个在 [0, 1) 范围内均匀分布的随机数的稀疏数组
返回一个具有给定形状和密度的稀疏数组,其中的值在 [0, 1) 范围内均匀随机生成。
- 参数:
- shape整数或整数元组
数组的形状
- density实数,可选 (默认: 0.01)
生成矩阵的密度:密度等于 1 表示一个完整矩阵,密度为 0 表示一个没有非零项的矩阵。
- format字符串,可选 (默认: ‘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 是一个整数,则使用一个新的
RandomState
实例,并用 random_state 进行初始化。如果 random_state 已经是一个
Generator
或RandomState
实例,则使用该实例。
在 1.15.0 版本中更改:作为从使用
numpy.random.RandomState
到numpy.random.Generator
的 SPEC-0007 过渡的一部分,此关键字从 random_state 更改为 rng。 在过渡期间,这两个关键字将继续工作,尽管一次只能指定一个。 过渡期过后,使用 random_state 关键字的函数调用将发出警告。 上面概述了 random_state 和 rng 的行为,但在新代码中应仅使用 rng 关键字。此随机状态将用于采样 indices (稀疏结构),默认情况下也用于数据值(请参见 data_sampler)。
- data_sampler可调用对象,可选(默认值取决于 dtype)
具有关键字参数 size 的随机数据值采样器。 此函数应采用一个关键字参数 size,该参数指定其返回的 ndarray 的长度。 它用于在选择这些值的位置后生成矩阵中的非零值。 默认情况下,除非 dtype 是整数(来自该 dtype 的默认均匀整数)或复数(复平面单位正方形上的默认均匀值),否则使用均匀 [0, 1) 随机值。 对于这些,使用 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.]])
构建自定义分布。 此示例从 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)
或者,我们可以从 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_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)