赋值 x~U(a,b) 得到均匀分布数组:
x_U=uniform(a,b,1000)
存在正态分布:
y~N(μ,σ)
我想要获取与x_U元素对应相关的数组
y_N
。
在python中如何执行?在matlab中看起来很简单。 比如这个链接explainnation。
代码如下是Normality转Uniform的:
from numpy.random import *
import matplotlib.pyplot as plt
a = normal(25,5.4,1000)
hist_N = plt.hist(a,bins=20,normed=True)
a_cum = np.cumsum(a)
hist_U = plt.hist(a_cum,bins=20,normed=True)
a_cum
是与 a
元素相关的统一对应项随机数生成uni会应用于Monto-Carlo模拟,但原始参数是正态分布,所以需要转换。我的目的是反转上面的编码过程。
如果我点击您问题中的链接,它会告诉我该怎么做。我不确定 erfinv 是否有效,但这段代码似乎将随机均匀数组转换为高斯形状数组:
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import erfinv
X = np.random.uniform(0,1,1000)
Gauss = lambda x, mu, sigma: mu + np.sqrt(2)*sigma*erfinv(2*x-1)
plt.hist(Gauss(X, 1, 0.2), bins = 20)
plt.show()
Gauss 这里是一个函数,由 lambda 语句创建,其工作原理与使用 def 定义函数基本相同。我使用的功能是您链接中的功能。
高斯形状看起来像 以及统一的形状 .