scipy.sparse.

random_array#

scipy.sparse.random_array(shape, *, density=0.01, format='coo', dtype=None, rng=None, data_sampler=None)[原始碼]#

返回 [0, 1) 範圍內均勻分佈的隨機數稀疏陣列

返回具有給定形狀和密度的稀疏陣列,其中的值在 [0, 1) 範圍內均勻隨機生成。

參數:
shapeint 或 int 元組

陣列的形狀

density實數,選用 (預設值:0.01)

生成矩陣的密度:密度等於 1 表示完整矩陣,密度為 0 表示沒有非零項目的矩陣。

formatstr,選用 (預設值:'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 是 int,則使用新的 RandomState 實例,並以 random_state 作為種子。

  • 如果 random_state 已經是 GeneratorRandomState 實例,則使用該實例。

在版本 1.15.0 中變更:作為從使用 numpy.random.RandomState 過渡到 numpy.random.GeneratorSPEC-007 轉換的一部分,此關鍵字已從 random_state 變更為 rng。在過渡期間,這兩個關鍵字將繼續有效,但一次只能指定一個。在過渡期之後,使用 random_state 關鍵字的函數呼叫將發出警告。上面概述了 random_staterng 的行為,但在新程式碼中應僅使用 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)