scipy.sparse.

random#

scipy.sparse.random(m, n, density=0.01, format='coo', dtype=None, rng=None, data_rvs=None)[原始碼]#

產生具有給定形狀和密度的稀疏矩陣,其值為隨機分佈。

警告

此函數返回稀疏矩陣 – 而不是稀疏陣列。建議您使用 random_array 以利用稀疏陣列功能。

參數:
m, nint

矩陣的形狀

densityreal, optional

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

formatstr, optional

稀疏矩陣格式。

dtypedtype, optional

傳回的矩陣值的類型。

rng{None, int, numpy.random.Generator}, optional

如果通過關鍵字傳遞 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 已經是 GeneratorRandomState 實例,則使用該實例。

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

此隨機狀態將用於採樣稀疏結構,但不一定用於採樣矩陣的結構性非零條目的值。

data_rvscallable, optional

採樣請求數量的隨機值。此函數應採用單一引數,指定它將傳回的 ndarray 的長度。稀疏隨機矩陣的結構性非零條目將取自此函數採樣的陣列。依預設,將使用與採樣稀疏結構相同的隨機狀態,採樣均勻分佈 [0, 1) 隨機值。

傳回:
res稀疏矩陣

另請參閱

random_array

建構稀疏陣列而不是稀疏矩陣

範例

傳遞 np.random.Generator 實例以獲得更好的效能

>>> import scipy as sp
>>> import numpy as np
>>> rng = np.random.default_rng()
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng)

為值提供取樣器

>>> rvs = sp.stats.poisson(25, loc=10).rvs
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng, data_rvs=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(3, 4, density=0.25, rng=rng,
...                      data_rvs=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(3, 4, density=0.25, rng=rng,
...                      data_rvs=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()  # get a frozen version of the distribution
>>> S = sp.sparse.random(3, 4, density=0.25, rng=rng, data_rvs=Y.rvs)