NumPy Rayleigh分布怎么用?生成随机数和概率密度函数求法?

文章导读
Previous Quiz Next 什么是 Rayleigh 分布? Rayleigh 分布是一种连续概率分布,用于建模二维平面中向量的幅度,其中其分量是独立的且方差相等的正态分布。
📋 目录
  1. 什么是 Rayleigh 分布?
  2. 使用 NumPy 生成 Rayleigh 分布
  3. 可视化 Rayleigh 分布
  4. Rayleigh 分布的应用
  5. 生成累积 Rayleigh 分布
  6. Rayleigh 分布的属性
  7. 在假设检验中使用 Rayleigh 分布
  8. 为可重复性设置种子
A A

NumPy - Rayleigh 分布



Previous
Quiz
Next

什么是 Rayleigh 分布?

Rayleigh 分布是一种连续概率分布,用于建模二维平面中向量的幅度,其中其分量是独立的且方差相等的正态分布。

它由一个尺度参数 σ(sigma)定义。这种分布常用于信号处理和通信理论中来建模散射信号。

例如,Rayleigh 分布可以描述风速的分布,前提是两个正交方向的风速分量是独立的且正态分布的。

Rayleigh 分布的概率密度函数 (PDF) 定义为 −

f(x; σ) = (x / σ2) * exp(-x2 / (2σ2)) for x ≥ 0, 0 otherwise

其中,

  • σ:尺度参数(与标准差相关)。
  • x:向量的幅度。
  • exp:指数函数。

使用 NumPy 生成 Rayleigh 分布

NumPy 提供了 numpy.random.rayleigh() 函数来从 Rayleigh 分布中生成样本。您可以指定尺度参数 σ 和生成样本的大小。

示例

在本示例中,我们生成 10 个来自尺度参数 σ=1 的 Rayleigh 分布的随机样本 −

import numpy as np

# 生成 10 个来自尺度参数 σ=1 的 Rayleigh 分布的随机样本
samples = np.random.rayleigh(scale=1, size=10)
print("Random samples from Rayleigh distribution:", samples)

以下是得到的结果 −

Random samples from Rayleigh distribution: [1.31998799 0.72631303 2.4544915  0.31195556 1.14244968 0.299947020.74889027 0.2239033  1.43290625 1.18894253]

可视化 Rayleigh 分布

可视化 Rayleigh 分布有助于更好地理解其特性。我们可以使用 Matplotlib 等库创建直方图来显示生成样本的分布。

示例

在以下示例中,我们首先生成 1000 个来自尺度参数 σ=1 的 Rayleigh 分布的随机样本。然后创建直方图来可视化该分布 −

import numpy as np
import matplotlib.pyplot as plt

# 生成 1000 个来自尺度参数 σ=1 的 Rayleigh 分布的随机样本
samples = np.random.rayleigh(scale=1, size=1000)

# 创建直方图来可视化分布
plt.hist(samples, bins=30, edgecolor='black', density=True)
plt.title('Rayleigh Distribution')
plt.xlabel('Magnitude')
plt.ylabel('Frequency')
plt.show()

直方图显示了 Rayleigh 试验中向量幅度的频率。条形代表每个可能结果的概率,形成 Rayleigh 分布的特征形状 −

Rayleigh Distribution

Rayleigh 分布的应用

Rayleigh 分布用于各个领域来建模分量为高斯随机变量的向量的幅度。以下是一些实际应用 −

  • 信号处理:建模具有多个散射路径的信号包络。
  • 雷达系统:建模来自具有随机散射目标的接收信号强度。
  • 通信理论:建模受多径衰落影响的信号幅度。

生成累积 Rayleigh 分布

有时,我们对 Rayleigh 分布的累积分布函数 (CDF) 感兴趣,它给出了在该区间内获得最多 x 个事件(包括 x)的概率。

NumPy 没有内置 Rayleigh 分布 CDF 的函数,但我们可以使用循环和 SciPy 库中的 scipy.stats.rayleigh.cdf() 函数来计算它。

示例

以下是一个在 NumPy 中生成累积 Rayleigh 分布的示例 −

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

# 定义 scale 参数
sigma = 1

# 生成累积分布函数 (CDF) 值
x = np.linspace(0, 5, 100)
cdf = rayleigh.cdf(x, scale=sigma)

# 绘制 CDF
plt.plot(x, cdf, marker='o', linestyle='-', color='b')
plt.title('Cumulative Rayleigh Distribution')
plt.xlabel('Magnitude')
plt.ylabel('Cumulative probability')
plt.grid(True)
plt.show()

该图显示了在 Rayleigh 试验中获得最多每个 magnitude(包括该 magnitude)的累积概率。CDF 是一条平滑曲线,随着 magnitude 增加而递增至 1 −

Cumulative Rayleigh Distribution

Rayleigh 分布的属性

Rayleigh 分布具有几个关键属性,例如 −

  • Scale 参数 (σ): scale 参数与底层 Gaussian 随机变量的标准差相关。
  • 均值和方差: Rayleigh 分布的均值为 σ√(π/2),方差为 (2-π/2)σ2
  • 偏度: 该分布向右偏斜,具有长尾。

在假设检验中使用 Rayleigh 分布

Rayleigh 分布常用于假设检验,特别是在对向量 magnitude 进行测试时。

一种常见的测试是 Rayleigh 测试,用于确定观测到的 magnitude 是否与期望的 magnitude 显著不同。以下是一个使用 scipy.stats.rayleigh() 函数的示例:

示例

在本示例中,我们执行 Rayleigh 测试,以确定观测到的 magnitude (1.5) 是否与期望的 scale (=1) 显著不同。p-value 表示在零假设为真的前提下,获得至少与观测结果一样极端的结果的概率 −

from scipy.stats import rayleigh

# 观测到的 magnitude
observed_magnitude = 1.5

# 期望的 scale 参数 (σ)
expected_scale = 1

# 执行 Rayleigh 测试
p_value = rayleigh.sf(observed_magnitude, scale=expected_scale)
print("P-value from Rayleigh test:", p_value)

得到的输出如下所示 −

P-value from Rayleigh test: 0.32465246735834974

为可重复性设置种子

为了确保可重复性,您可以在生成 Rayleigh 分布之前设置特定的种子。这确保了每次运行代码时生成相同的随机数序列。

示例

通过设置种子,您确保随机生成每次执行代码时产生相同的结果,如以下示例所示 −

import numpy as np

# 为可重复性设置种子
np.random.seed(42)

# 生成 10 个来自 scale=1 的 Rayleigh 分布的随机样本
samples = np.random.rayleigh(scale=1, size=10)
print("Random samples with seed 42:", samples)

产生的结果如下 −

Random samples with seed 42: [0.96878077 2.45361832 1.62280356 1.35125316 0.58245149 0.58240242
 0.34594441 2.00560757 1.35578918 1.56923552]