我需要撰寫一個函式,該函式生成維度 d 中 n 個獨立高斯變數的樣本,期望為零,其中第 i 個分量的方差為 1/i,對于 i=1,...d。該函式應將樣本作為形狀為 (n,d) 的矩陣回傳。
我想過使用 rng.standard_normal() 但我不知道如何生成一個樣本,以便每個第 i 個分量都有一個方差 1/i。任何幫助表示贊賞。
uj5u.com熱心網友回復:
干得好:
import numpy as np
n = 4
d = 3
tmp = [(np.random.multivariate_normal(mean=np.zeros((n,)), cov=np.eye(n) * np.sqrt(1/(d 1)))) for i in range(d)]
res = np.squeeze(np.array(tmp)).T
uj5u.com熱心網友回復:
使用該random包,您可以獲得方差遞減的正常抽簽串列,如下所示:
import random
d=4
n=10
l = [random.gauss(0, (1/i)**2) for i in range(1, 1 d)]
您可以使用另一種串列推導式獲得具有 n 行(二維串列)的矩陣:
mat = [[random.gauss(0, (1/i)**2) for i in range(1, 1 d)] for _ in range(n)]
換句話說,如果您查看每行的 x 值,它們將來自相同的分布。如果您需要逐行平穩,您可以轉置使用創建的雙串列list(zip(mat)),或者您可以更改迭代邏輯:
mat2 = [[random.gauss(0, (1/i)**2) for _ in range(d)] for i in range(1, 1 n)]
在這種情況下,每個串列(行)都將具有預期的方差,對于足夠長的串列,您可以驗證這一點:
import statistics as s
[s.variance(l) for l in mat2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327776.html
下一篇:如何替換Python中鍵的值?
