如何在Python中转换统一正态变量?

问题描述 投票:0回答:1

赋值 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模拟,但原始参数是正态分布,所以需要转换。我的目的是反转上面的编码过程。

python matlab normal-distribution uniform
1个回答
3
投票

如果我点击您问题中的链接,它会告诉我该怎么做。我不确定 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 定义函数基本相同。我使用的功能是您链接中的功能。

高斯形状看起来像 this 以及统一的形状 this.

© www.soinside.com 2019 - 2024. All rights reserved.