我试图用matplotlib可视化一个多元正态分布。我想制作这样的东西:
我使用以下代码:
from mpl_toolkits import mplot3d
x = np.linspace(-1, 3, 100)
y = np.linspace(0, 4, 100)
X, Y = np.meshgrid(x, y)
Z = np.random.multivariate_normal(mean = [1, 2], cov = np.array([[0.5, 0.25],[0.25, 0.50]]), size = 100000)
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='viridis', edgecolor='none')
ax.set_title('surface');
但我得到以下错误消息:
...
7 ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
----> 8 cmap='viridis', edgecolor='none')
...
ValueError: shape mismatch: objects cannot be broadcast to a single shape
发生错误的原因是什么?如何纠正我的代码?
1条答案
按热度按时间n3h0vuf21#
我已经用
scipy.stats.multivariate_normal
完成了这个操作,使用pdf
方法生成z值。正如@Piinthesky所指出的,numpy实现返回给定分布的x和y值。使用scipy版本的一个例子是在Python中添加围绕点的半径中的高斯噪声[关闭]:在
python 3.11.2
、scipy 1.10.1
、matplotlib 3.7.1
、numpy 1.24.3
中测试