1. 程式人生 > >【114】Python小例子:numpy.random.randn生成符合正態分佈的資料,並畫出正態分佈的鐘曲線。

【114】Python小例子:numpy.random.randn生成符合正態分佈的資料,並畫出正態分佈的鐘曲線。

自己學習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()