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

如何基于两个PDF计算联合概率并绘制Matplotlib 3D曲面图

解决两个独立PDF的联合概率3D可视化问题

你的核心问题是错误地用PDF值生成了网格X、Y,正确的做法应该用样本点作为二维平面的坐标,再计算对应点的联合概率密度。

关键修正点:

  • X、Y应该是二维平面上的坐标网格(对应两个变量的取值),而非PDF的取值
  • 若两个变量独立,联合概率密度等于各自PDF的乘积:P(x,y) = P(x) * P(y)

完整修正代码:

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

# 生成样本并计算均值、标准差
x1 = norm.rvs(size=1000)
x2 = np.array([val if abs(val)<=1 else -val for val in x1])  # 用numpy数组更高效

mean_x1, std_x1 = np.mean(x1), np.std(x1)
mean_x2, std_x2 = np.mean(x2), np.std(x2)

# 生成二维坐标网格(x轴和y轴的取值范围)
samples = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(samples, samples)

# 计算联合概率密度:独立变量下为两个PDF的乘积
Z = norm.pdf(X, mean_x1, std_x1) * norm.pdf(Y, mean_x2, std_x2)

# 3D可视化
fig = plt.figure(figsize=(12, 8))
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')

# 添加标签提升可读性
ax.set_xlabel('X1 Values')
ax.set_ylabel('X2 Values')
ax.set_zlabel('Joint Probability Density')
ax.set_title('Joint PDF of X1 and X2')

plt.show()

代码说明:

  1. 把x2的列表推导改为numpy数组,比map更高效且符合数值计算习惯
  2. 提前计算均值和标准差,避免重复计算
  3. X和Y是样本点的网格,对应二维平面上的每个(x1, x2)坐标
  4. Z是每个坐标点的联合概率密度值,通过两个单变量PDF相乘得到
  5. 添加了颜色映射、坐标轴标签和标题,让可视化结果更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:30:58