scipy.sparse.

随机数组#

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 起,为 random_state 传递一个 np.random.Generator``(例如 ``np.random.default_rng)将导致更快的执行时间。

为了向后兼容,默认使用了一个慢得多的实现。

参数:
形状int 或 int 的元组

数组的形状

密度real, 可选 (默认: 0.01)

生成矩阵的密度:密度等于1意味着一个满矩阵,密度为0意味着一个没有非零项的矩阵。

格式str, 可选 (默认: ‘coo’)

稀疏矩阵格式。

dtypedtype, 可选 (默认: np.float64)

返回矩阵值的类型。

random_state : {None, int, Generator, RandomState}, 可选{None, int,}

一个用于确定非零结构的随机数生成器。我们推荐每次调用时手动提供 numpy.random.Generator,因为它比 RandomState 快得多。

  • 如果 None`(或 `np.random),则使用 numpy.random.RandomState 单例。

  • 如果是一个整数,则会使用一个新的 Generator 实例,并使用该整数作为种子。

  • 如果是一个 GeneratorRandomState 实例,那么将使用该实例。

这个随机状态将用于采样 indices`(稀疏结构),默认情况下也用于数据值(参见 `data_sampler)。

数据采样器可调用对象,可选(默认值取决于 dtype)

使用关键字参数 size 采样随机数据值。此函数应接受一个关键字参数 size,用于指定其返回的 ndarray 的长度。它用于在选择这些值的位置后生成矩阵中的非零值。默认情况下,使用均匀分布的 [0, 1) 随机值,除非 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)