scipy.sparse.

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)