一、什麼是Numpy?

Numpy是Python中用於科學計算的核心庫,提供了高效的多維數組對象(ndarray)和大量數學函數。隨機數生成是Numpy的常用功能之一,廣泛用於數據分析、機器學習、模擬實驗等場景。而np.random是Numpy專門用於生成隨機數的子模塊,其中randrandn是最基礎且常用的兩個函數。

二、安裝與導入Numpy

首先確保已安裝Numpy(若未安裝,可通過pip install numpy命令安裝)。在代碼中導入Numpy:

import numpy as np

三、隨機數生成的基本概念

Numpy的隨機數是僞隨機數(由算法生成,固定種子可復現),常用分佈包括:
- 均勻分佈:每個數出現的概率相同(類似擲骰子,每個面概率相等)。
- 正態分佈(高斯分佈):數據集中在均值附近,呈“鐘形”分佈(類似人類身高,多數人接近平均身高,極端值少)。

四、np.random.rand:生成均勻分佈隨機數

np.random.rand(d0, d1, ..., dn)用於生成[0, 1)區間內的均勻分佈隨機數,參數d0, d1,...表示數組的形狀(如行數、列數)。

示例1:生成1維數組

# 生成長度爲5的1維數組(形狀:(5,))
arr1 = np.random.rand(5)
print(arr1)
# 輸出示例(每次運行結果不同):[0.3456 0.1234 0.7890 0.5678 0.9012]

示例2:生成多維數組

# 生成2行3列的矩陣(形狀:(2, 3))
arr2 = np.random.rand(2, 3)
print(arr2)
# 輸出示例:
# [[0.1234 0.5678 0.9012]
#  [0.3456 0.7890 0.2345]]

關鍵特點:

  • 所有元素值在[0, 1)之間。
  • 若參數爲空(np.random.rand()),返回標量0~1的隨機數。

五、np.random.randn:生成標準正態分佈隨機數

np.random.randn(d0, d1, ..., dn)用於生成標準正態分佈(均值=0,標準差=1)的隨機數,參數含義與rand相同。

示例1:生成1個隨機數

# 生成1個標準正態分佈隨機數
num = np.random.randn()
print(num)
# 輸出示例:0.5678(可能爲正或負,多數值集中在-1~1之間)

示例2:生成2×2矩陣

# 生成2行2列的標準正態分佈矩陣
mat = np.random.randn(2, 2)
print(mat)
# 輸出示例:
# [[-0.1234  0.5678]
#  [ 0.9012 -0.3456]]

關鍵特點:

  • 數據集中在0附近,大部分值在[-1, 1]之間,極端值(如±3以上)概率較低。
  • 若需調整均值或標準差,可通過公式轉換:μ + σ * np.random.randn(shape)(μ爲目標均值,σ爲目標標準差)。

六、rand與randn的對比

特性 np.random.rand() np.random.randn()
分佈類型 均勻分佈([0, 1)) 標準正態分佈(均值0,標準差1)
數據範圍 所有元素在0到1之間(含0不含1) 可正可負,多數值集中在-1~1之間
參數 形狀(如(m, n) 形狀(如(m, n)
核心作用 生成等概率取值的隨機數據 生成接近自然現象的“正態分佈”數據

七、實用技巧:固定隨機種子

爲了避免隨機結果波動(如復現實驗),可通過np.random.seed()固定種子:

np.random.seed(0)  # 種子固定爲0,後續隨機數生成結果一致
print(np.random.rand(2, 2))
# 輸出:
# [[0.3980 0.4109]
#  [0.0399 0.3398]]

八、總結

  • np.random.rand(shape)生成[0, 1)均勻分佈的隨機數組,適合需要“等概率取值”的場景(如初始化權重)。
  • np.random.randn(shape)生成標準正態分佈的隨機數組,適合模擬自然數據波動(如生成噪聲、測試算法魯棒性)。

建議:初學者可通過多次生成不同形狀的數組,觀察數值分佈特點,快速熟悉兩者區別。

練習

嘗試生成以下隨機數組,並觀察結果:
1. np.random.rand(3, 4)(3行4列均勻分佈矩陣)
2. np.random.randn(1000)(1000個標準正態分佈數,計算均值和標準差是否接近0和1)
3. 固定種子seed=1,生成np.random.rand(2)並對比兩次運行結果是否相同。

小夜