如何用python numpy產生乙個正態分佈隨機數的向量或者矩陣?

時間 2021-06-09 03:33:26

1樓:漠漠上寒

import numpy as np

from numpy.linalg import cholesky

import matplotlib.pyplot as plt

sampleNo = 1000

mu = np.array([[1, 5]])

Sigma = np.array([[10, 5], [5, 5]])

R = cholesky(Sigma).T

va,vc = np.linalg.eig(Sigma); R2 = (np.diag(va)**0.5)@vc.T

s1 = np.random.randn(sampleNo, 2) @ R + mu #法1

s2 = np.random.randn(sampleNo, 2) @ R2 + mu #法2

s3 = np.random.multivariate_normal(mu[0],Sigma,sampleNo) #法3

plt.plot(*s1.T,'.',label = 's1')

plt.plot(*s2.T,'.',label = 's2')

plt.plot(*s3.T,'.',label = 's3')

plt.axis('scaled')

plt.legend()

法3 為庫函式。

法1,根據 採石工 答案,使用cholesky分解。然而我們產生的隨機向量X是行向量,右乘的變換陣R需要對cholesky分解結果轉置,即若有X' = XR,則 Sigma = R.T @ R,原答案有誤。

法2,借Sigma的酉相似對角化求R2,幾何意義明顯,更直觀。va,vc = np.linalg.

eig(Sigma); R2 = (np.diag(va)**0.5)@vc.

T。R2變換相當於先沿座標軸伸縮後旋轉翻轉,va是伸縮比,酉陣vc是由斜轉正的右乘旋轉矩陣,其列向量為主軸方向(指上圖橢圓最長軸和最短軸)。

2樓:代霸天

numpy

.random

.normal

(size

=100

)numpy

.random

.normal

(size=(

10,10))

python numpy 陣列如何對每個元素進行操作?

金辰 用map函式可以實現 def f xreturn x x.r map f,1,2,3,4,5,6,7,8,9 list r 1,4,9,16,25,36,49,64,81 源鏈結map reduce 採石工 答主總結了四種方式,都沒有直接用到迴圈,希望有用。import numpy as np...

如何用有限的錢買到更多的時間?AND如何用有限的時間掙更多的錢?

Alice 無論您是想旅行,學習還是想賺錢,都要為自己設定乙個中等難度的目標,讓自己有動力改變現狀,讓自己為之奮鬥。例如,當夜晚已經很深,你的眼睛仍然盯著你手中的電子螢幕時,想想明天的預約旅行,並且預訂了門票。如果延遲延遲,不僅會花錢,而且也是錯誤的。你和你的朋友之間的協議破壞了你的可信度,這樣你就...

Pytorch 如何用variable如何讓某個方程的權值可學習

愛寫碼的貓貓 nn.Parameter,Tensor和Variable是pytorch中三種基本的資料結構。Tensor np.array的GPU版本 Variable 對Tensor的封裝,加入了grad屬性,可以用backward求梯度,但是預設是不需要求梯度的。Parameter 對Varia...