You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中概率分布的变量变换求解方法

变量变换求概率密度的Python实现

核心思路是利用概率密度变换的基本关系:$P_X(x)dx = P_E(e)de$,推导得$P_X(x) = P_E(e) \times \left| \frac{de}{dx} \right|$。对于你的变换$X = \frac{|a-E|}{|E|}$,可以通过以下步骤实现:

1. 推导雅可比行列式

先对$X$关于$E$求导,再取倒数的绝对值得到$\left| \frac{dE}{dX} \right|$:

  • 令$X = \left| \frac{a}{E} - 1 \right|$,求导可得$\frac{dX}{dE} = \pm \frac{a}{E^2}$(符号由$E$和$a$的相对大小决定)
  • 取绝对值后:$\left| \frac{dE}{dX} \right| = \frac{E^2}{|a|}$(该式对所有$E \neq 0$成立,无需分情况讨论)

2. Python实现步骤

步骤1:导入依赖并准备输入数据

import numpy as np
import matplotlib.pyplot as plt  # 可选,用于可视化

# 示例输入:替换成你的E数组和P(E)数组
a = 5.0
E = np.linspace(-10.0, 10.0, 200)  # 包含正负能量,排除0
E = E[E != 0]
# 示例概率密度:这里用正态分布,替换成你的P(E)
P_E = np.exp(-(E**2)/10)
P_E = P_E / np.trapz(P_E, E)  # 归一化,确保原分布积分=1

步骤2:计算X和对应的权重(雅可比项)

# 计算每个E对应的X值
X = np.abs(a - E) / np.abs(E)
# 计算雅可比行列式的绝对值,即权重
weight = E ** 2 / np.abs(a)
# 计算每个X点的概率密度贡献
contrib = P_E * weight

步骤3:合并相同/相近X的贡献

由于多个E可能映射到同一个X,需要将这些贡献相加。这里提供两种方法:

方法A:合并精确重复的X(适合离散点)

# 处理浮点精度问题,保留6位小数
X_rounded = np.round(X, 6)
# 获取唯一X值,并合并对应贡献
unique_X, idx = np.unique(X_rounded, return_inverse=True)
P_X = np.bincount(idx, weights=contrib)

方法B:分箱处理(适合连续分布)

# 定义分箱数量
num_bins = 100
# 生成X的分箱区间
X_bins = np.linspace(X.min(), X.max(), num_bins + 1)
# 计算每个分箱内的总贡献
P_X_binned, _ = np.histogram(X, bins=X_bins, weights=contrib)
# 计算分箱中点,用于可视化
X_mid = (X_bins[:-1] + X_bins[1:]) / 2
# 转换为概率密度(除以分箱宽度)
bin_width = X_bins[1] - X_bins[0]
P_X_binned = P_X_binned / bin_width

步骤4:验证结果(可选)

验证变换后的分布是否归一化:

# 对分箱结果验证积分
print(f"变换后分布积分:{np.trapz(P_X_binned, X_mid):.4f}")  # 应接近1

可视化结果(可选)

plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.plot(E, P_E, label='P(E)')
plt.xlabel('E')
plt.ylabel('Probability Density')
plt.title('Original Distribution')
plt.legend()

plt.subplot(122)
plt.plot(X_mid, P_X_binned, label='P(X)')
plt.xlabel('X')
plt.ylabel('Probability Density')
plt.title('Transformed Distribution')
plt.legend()
plt.show()

注意事项

  • 必须排除$E=0$的情况,因为变换式分母为0,无意义。
  • 如果$a=0$,所有$E$都会映射到$X=1$,此时$P(X)$是狄拉克delta函数,需单独处理。
  • 若输入的$P(E)$是未归一化的,变换后的$P(X)$也会是未归一化的,可根据需要添加归一化步骤。

内容的提问来源于stack exchange,提问作者zukofirenation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:04:59