我有一个二维高斯分布的简单图
from scipy.stats import multivariate_normal
from matplotlib import pyplot as plt
means = [ 1.03872615e+00, -2.66927843e-05]
cov_matrix = [[3.88809050e-03, 3.90737359e-06], [3.90737359e-06, 4.28819569e-09]]
# This works
a_lims = [0.7, 1.3]
b_lims = [-5, 5]
# This does not work
a_lims = [0.700006488869478, 1.2849292618191401]
b_lims =[-5.000288311285968, 5.000099437047633]
dist = multivariate_normal(mean=means, cov=cov_matrix)
a_plot, b_plot = np.mgrid[a_lims[0]:a_lims[1]:1e-2, b_lims[0]:b_lims[1]:0.1]
pos = np.empty(a_plot.shape + (2,))
pos[:, :, 0] = a_plot
pos[:, :, 1] = b_plot
z = dist.pdf(pos)
plt.figure()
plt.contourf(a_plot, b_plot, z, cmap='coolwarm', levels=100)
如果我使用标记为“this works”的限制,我会得到以下曲线图(正确)
但是,如果我使用相同的限制,但稍作调整,它的绘图完全错误,因为本地化为不同的值(如下)
我想这是mgrid
中的一个bug。有人有什么想法吗?更具体地说,为什么分布的最大值会移动
只关注
xaxis
:mgrid
当a:b:c
等给定范围使用np.arange(a, b, c)
时arange
当给定的浮点步长相对于终点不可靠时mgrid
允许您使用np.linspace
,这对于浮点步骤来说是更好的选择。例如,对于第一组限制:===
通过大幅缩小
b_lims
并生成更精细的网格,我得到了一个漂亮的倾斜椭圆所以我认为你的图中的差异是垂直方向上过粗的网格造成的。这可能会影响
pdf
生成和轮廓原始网格点的高分辨率绘图。只有一个
b
级别与高概率值相交。由于椭圆是倾斜的,两个网格采样不同的部分,因此看起来不同的PDF相关问题 更多 >
编程相关推荐