在Python中每个种子的正态分布的均值和方差

huangapple go评论105阅读模式
英文:

Mean, variance of normal distribution for each seed in Python

问题

我正在使用numpy.random.seed()来获得不同的正态分布。但我希望对于每个种子,mean,var保持恒定。我该如何实现这一目标?以下是当前和期望的输出。

当前输出为:

  1. Mean = 49.99989488440971
  2. var = 1.0009790234390512
  3. Mean = 50.00911322245587
  4. var = 0.8709906144821978

期望的输出是:

  1. Mean = 50.000
  2. var = 1.000
  3. Mean = 50.000
  4. var = 1.000
英文:

I am using numpy.random.seed() to get different normal distribution. But I want to have the mean,var to remain constant for each seed. How can I achieve this? I present the current and expected output.

  1. from scipy.stats import truncnorm
  2. import numpy as np
  3. import os
  4. import csv
  5. import pandas as pd
  6. import random
  7. import matplotlib.pyplot as plt
  8. for i in range(0,2):
  9. np.random.seed(i)
  10. mu, sigma = 49.925, 0.996 # mean and standard deviation
  11. Nodes=220
  12. r = (1e-6)*np.random.normal(mu, sigma, Nodes)
  13. sort_r = np.sort(r)
  14. r1=sort_r[::-1]
  15. r1=r1.reshape(1,Nodes)
  16. r2 = r.copy()
  17. np.random.shuffle(r2.ravel()[1:])
  18. r2=r2.reshape(1,Nodes)
  19. maximum = r2.max()
  20. indice1 = np.where(r2 == maximum)
  21. r2[indice1] = r2[0][0]
  22. r2[0][0] = maximum
  23. r2[0][Nodes-1] = maximum
  24. mean=np.mean(r)
  25. print("Mean =",mean*1e6)
  26. var=np.var(r)
  27. print("var =",var*1e12)
  28. r=pd.Series(r*1e6)
  29. r.hist()
  30. plt.xlabel("Pore throat size [\u03BCm]",size=15)
  31. plt.ylabel("Count",size=15)
  32. plt.title(rf"var={round(var*1e12,1)}",size=25)
  33. plt.savefig(rf"C:\Users\USER\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D0 nodes_1\var_1\Histogram_0.png")

The current output is

  1. Mean = 49.99989488440971
  2. var = 1.0009790234390512
  3. Mean = 50.00911322245587
  4. var = 0.8709906144821978

The expected output is

  1. Mean = 50.000
  2. var = 1.000
  3. Mean = 50.000
  4. var = 1.000

答案1

得分: 1

IIUC,您可以使用标准归一化(z-分数):

  1. for i in range(0, 2):
  2. np.random.seed(i)
  3. mu, sigma = 49.925, 2.996 # 均值和标准差
  4. Nodes = 220
  5. r = (1e-6) * np.random.normal(mu, sigma, Nodes)
  6. # 目标
  7. t_mean = 50
  8. t_std = 3
  9. # 标准缩放器
  10. a = (1e-6) * (t_mean + (r - r.mean()) / (r.std() / t_std))
  11. print("Mean =", a.mean() * 1e6)
  12. print("var =", a.std() * 1e6)

输出:

  1. Mean = 50.000000000000014
  2. var = 2.999999999999999
  3. Mean = 49.99999999999999
  4. var = 3.000000000000001
英文:

IIUC, you can use the standard normalization (z-score):

  1. for i in range(0,2):
  2. np.random.seed(i)
  3. mu, sigma = 49.925, 2.996 # mean and standard deviation
  4. Nodes = 220
  5. r = (1e-6) * np.random.normal(mu, sigma, Nodes)
  6. # target
  7. t_mean = 50
  8. t_std = 3
  9. # standard scaler
  10. a = (1e-6) * (t_mean + (r - r.mean()) / (r.std() / t_std))
  11. print("Mean =", a.mean() * 1e6)
  12. print("var =", a.std() * 1e6)

Output:

  1. Mean = 50.000000000000014
  2. var = 2.999999999999999
  3. Mean = 49.99999999999999
  4. var = 3.000000000000001

huangapple
  • 本文由 发表于 2023年6月5日 12:48:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/76403552.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定