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