【114】Python小例子:numpy.random.randn生成符合正態分佈的資料,並畫出正態分佈的鐘曲線。
阿新 • • 發佈:2018-12-26
自己學習python 隨手寫的一個小例子。先利用 numpy.random.randn生成符合正態分佈的資料,然後再給這些資料畫正態分佈的曲線圖。
import numpy as np
import matplotlib.pyplot as plt
size=2000
X = np.array(range(1,1+size))
# 利用 numpy.random.randn 函式生成符合正態分佈的隨機數。
Y = np.random.randn(size)
# 第一個散點圖
fig = plt.figure()
fig.set_size_inches(10, 4) # 整個繪圖區域的寬度10和高度4
ax1 = fig.add_subplot(1, 2, 1) # 整個繪圖區分成一行兩列,當前圖是第一個。
ax1.set_title("san dian")
ax1.set_xlabel("X")
ax1.set_ylabel("Y")
ax1.scatter(X, Y)
# 統計正態分佈的時候,每個取值範圍的大小。
interval = 0.5
X2 = [-3.0, -2.5, -2.0, -1.5, -1.0, -0.5, 0, 0.5, 1, 1.5, 2.0, 2.5, 3.0]
Y2 = [0,0,0,0,0,0,0,0,0,0,0,0,0]
for i in range(size):
y = Y[i]
# 正態分佈的中間取值範圍,這裡指零周圍的取值範圍。
middle = (len(X2) + 1) / 2 - 1
if y >= -0.5 * interval and y < 0.5 * interval:
Y2[middle] += 1
continue
# 去掉中間的零後,剩下單側的取值範圍的個數。比如在統計的時候,包含零
# 在內有13個取值範圍,去掉零後還剩12個。因為正態分佈左右對稱,所以左
# 側有六個取值範圍,右側也有六個取值範圍。
half = (len(X2)-1) / 2
# 零左側的取值範圍。
for j in range( half ):
if y >= -(0.5 + j + 1) * interval and y < -(0.5 +j) * interval:
Y2[middle - j - 1] += 1
continue
# 零右側的取值範圍。
for j in range(half):
if y >= (0.5 + j) * interval and y < (0.5 + j + 1) * interval:
Y2[middle + j + 1] += 1
continue
ax2 = fig.add_subplot(1, 2, 2)
ax2.set_title("dsds")
ax2.set_xlabel("X2")
ax2.set_ylabel("Y2")
ax2.scatter(X2,Y2)
ax2.plot(X2, Y2)
plt.show()