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