簡體   English   中英

Numpy數組,每行具有不同的標准偏差

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM