如何在python中转换Uniform normal变量?

kmb7vmvb  于 2023-11-15  发布在  Python
关注(0)|答案(1)|浏览(127)

赋值x~U(a,B)得到一个均匀分布数组:

  1. x_U=uniform(a,b,1000)

字符串
有一个正态分布:

  1. y~N(μ,σ)


我想得到数组y_N,它与x_U元素对应。如何在python中实现?在matlab. Such as this link explainnation中看起来很容易。代码如下:

  1. from numpy.random import *
  2. import matplotlib.pyplot as plt
  3. a = normal(25,5.4,1000)
  4. hist_N = plt.hist(a,bins=20,normed=True)
  5. a_cum = np.cumsum(a)
  6. hist_U = plt.hist(a_cum,bins=20,normed=True)

a_cum是与a元素相关的统一对应

Monto-Carlo模拟中采用的是产生均匀随机数的方法,但由于原始参数为正态分布,因此需要进行转换,本文的目的就是逆上述编码过程。

kqqjbcuj

kqqjbcuj1#

如果我按照你的问题中的链接,它会告诉我该怎么做。我不确定 erfinv 是否这样做,但这段代码似乎将随机均匀数组转换为高斯形状数组:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from scipy.special import erfinv
  4. X = np.random.uniform(0,1,1000)
  5. Gauss = lambda x, mu, sigma: mu + np.sqrt(2)*sigma*erfinv(2*x-1)
  6. plt.hist(Gauss(X, 1, 0.2), bins = 20)
  7. plt.show()

字符串
Gauss在这里是一个用lambda语句创建的函数,它的工作原理基本上和用 def 定义函数一样。我使用的函数就是你的链接中的函数。
高斯形状看起来像

,均匀形状看起来像

展开查看全部

相关问题