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...