python pylab图正态分布

use*_*022 97 python matplotlib

给定均值和方差是否有一个简单的pylab函数调用,它将绘制正态分布?

unu*_*tbu 175

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math

mu = 0
variance = 1
sigma = math.sqrt(variance)
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x, stats.norm.pdf(x, mu, sigma))
plt.show()
Run Code Online (Sandbox Code Playgroud)

gass发音,均值为0方差1

  • @user8408080:虽然这里的性能不是问题,但我倾向于使用 `math` 进行标量运算,因为例如,在对标量进行运算时,`math.sqrt` 比 `np.sqrt` 快一个数量级。 (4认同)
  • 我没有内联选项,因此需要:`%matplotlib inline`来显示绘图 (2认同)

lum*_*lum 47

我不认为有一个功能可以在一次通话中完成所有这些功能.但是你可以在中找到高斯概率密度函数scipy.stats.

所以我能提出的最简单的方法是:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# Plot between -10 and 10 with .001 steps.
x_axis = np.arange(-10, 10, 0.001)
# Mean = 0, SD = 2.
plt.plot(x_axis, norm.pdf(x_axis,0,2))
plt.show()
Run Code Online (Sandbox Code Playgroud)

资料来源:

  • 您应该将`norm.pdf`更改为`norm(0,1).pdf`.这使得更容易适应其他情况/了解这会生成表示随机变量的对象. (2认同)

小智 17

使用 seaborn 代替我使用的是 seaborn 的 distplot,其均值 = 5 std = 3 of 1000 个值

value = np.random.normal(loc=5,scale=3,size=1000)
sns.distplot(value)
Run Code Online (Sandbox Code Playgroud)

你会得到一条正态分布曲线


Joã*_*tas 13

如果您更喜欢使用循序渐进的方法,您可以考虑如下解决方案

import numpy as np
import matplotlib.pyplot as plt

mean = 0; std = 1; variance = np.square(std)
x = np.arange(-5,5,.01)
f = np.exp(-np.square(x-mean)/2*variance)/(np.sqrt(2*np.pi*variance))

plt.plot(x,f)
plt.ylabel('gaussian distribution')
plt.show()
Run Code Online (Sandbox Code Playgroud)


Luk*_*359 8

Unutbu答案是正确的.但由于我们的平均值可能大于或小于零,我仍然想改变这个:

x = np.linspace(-3 * sigma, 3 * sigma, 100)
Run Code Online (Sandbox Code Playgroud)

对此:

x = np.linspace(-3 * sigma + mean, 3 * sigma + mean, 100)
Run Code Online (Sandbox Code Playgroud)


Edu*_*tas 6

我相信设置高度很重要,因此创建了这个函数:

def my_gauss(x, sigma=1, h=1, mid=0):
    from math import exp, pow
    variance = pow(sigma, 2)
    return h * exp(-pow(x-mid, 2)/(2*variance))
Run Code Online (Sandbox Code Playgroud)

其中sigma是标准差,h是高度,mid是平均值。

到:

plt.close("all")
x = np.linspace(-20, 20, 101)
yg = [my_gauss(xi) for xi in x]
Run Code Online (Sandbox Code Playgroud)

这是使用不同高度和偏差的结果:

在此输入图像描述