[英]Numpy array with different standard deviation per row
我想得到一個NxM
矩陣,其中每行中的數字是從不同的正態分布(相同的mean
但不同的標准偏差)生成的隨機樣本。 以下代碼有效:
import numpy as np
mean = 0.0 # same mean
stds = [1.0, 2.0, 3.0] # different stds
matrix = np.random.random((3,10))
for i,std in enumerate(stds):
matrix[i] = np.random.normal(mean, std, matrix.shape[1])
但是,由於涉及for
循環,此代碼效率不高。 有更快的方法嗎?
np.random.normal()
是矢量化的 ; 你可以切換軸並轉置結果:
np.random.seed(444)
arr = np.random.normal(loc=0., scale=[1., 2., 3.], size=(1000, 3)).T
print(arr.mean(axis=1))
# [-0.06678394 -0.12606733 -0.04992722]
print(arr.std(axis=1))
# [0.99080274 2.03563299 3.01426507]
也就是說, scale
參數是逐列標准偏差,因此需要通過.T
進行轉置,因為你需要逐行輸入。
這個怎么樣?
rows = 10000
stds = [1, 5, 10]
data = np.random.normal(size=(rows, len(stds)))
scaled = data * stds
print(np.std(scaled, axis=0))
輸出:
[ 0.99417905 5.00908719 10.02930637]
這利用了這樣的事實:兩個正態分布可以通過線性縮放相互轉換(在這種情況下,乘以標准偏差)。 在輸出中,每列(第二軸)將包含與stds
的值對應的正態分布變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.