Python 多元正态分布概率密度函数的三维绘制
我从这里改编了这段代码: 使用我的数据 我的数据Python 多元正态分布概率密度函数的三维绘制,python,numpy,matplotlib,scipy,Python,Numpy,Matplotlib,Scipy,我从这里改编了这段代码: 使用我的数据 我的数据 hour Cost 20 58.00 20 336.00 20 34.50 20 106.50 20 118.00 ... 11 198.36 11 276.00 11 40.00 11 308.00 11 140.00 11 72.00 11 116.50 11 290.00 11 266.00 11 66.00 11 100.00 11 79.00 11 106.00 11 160.00 我的代码
hour Cost
20 58.00
20 336.00
20 34.50
20 106.50
20 118.00
...
11 198.36
11 276.00
11 40.00
11 308.00
11 140.00
11 72.00
11 116.50
11 290.00
11 266.00
11 66.00
11 100.00
11 79.00
11 106.00
11 160.00
我的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import multivariate_normal
dataset=df[['hour','Cost']]
X = dataset.hour.values
Y = dataset.Cost.values
X, Y = np.meshgrid(X, Y)
N = len(X)
def estimateGaussian(dataset):
mu = np.mean(dataset, axis=0)
sigma = np.cov(dataset.T)
return mu, sigma
mu, Sigma = estimateGaussian(dataset)
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X
pos[:, :, 1] = Y
F = multivariate_normal(pos, mu, Sigma)
Z = F.pdf(pos)
fig = plt.figure(figsize=(20,10))
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z, rstride=3, cstride=3, linewidth=1, antialiased=True,
cmap=cm.viridis)
cset = ax.contourf(X, Y, Z, zdir='z', offset=-0.15, cmap=cm.viridis)
# Adjust the limits, ticks and view angle
ax.set_zlim(-0.15,0.2)
ax.set_zticks(np.linspace(0,0.2,5))
ax.view_init(27, 90)
plt.show()
假设时间和成本为任意随机向量
- 如何修复此错误
- 我如何知道数据中任何一对(小时、成本)的概率并将其可视化
time=[1,2,3,4,5,6]
cost=[4,5,3,4,8,9]
var_matrix=np.array([time,cost]).T
mean = np.mean(var_matrix,axis=0)
sigma = np.cov(var_matrix.T)
y = multivariate_normal.pdf(var_matrix, mean=mean, cov=sigma,allow_singular=True)
这是一个简单的例子:
time=[1,2,3,4,5,6]
cost=[4,5,3,4,8,9]
var_matrix=np.array([time,cost]).T
mean = np.mean(var_matrix,axis=0)
sigma = np.cov(var_matrix.T)
y = multivariate_normal.pdf(var_matrix, mean=mean, cov=sigma,allow_singular=True)
- 如何绘制3d图形显示(成本、时间)和成对的概率密度值
提前感谢。您可以直接应用中给出的示例
请在您的问题中显示一个,即一个可运行的代码。查看您的数据,这里使用
np.meshgrid
是不合理的。错误本身来自于对多元_normal
的错误输入,有关如何使用它,请参阅。@ImportanceOfBeingErnest感谢您的回复,我编辑了我的问题,并添加了不带np.meshgrid函数的简单示例来讨论它。
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import multivariate_normal
time=[1,2,3,4,5,6]
cost=[4,5,3,4,8,9]
var_matrix=np.array([time,cost]).T
mean = np.mean(var_matrix,axis=0)
sigma = np.cov(var_matrix.T)
dist = multivariate_normal(mean, cov=sigma)
x, y = np.mgrid[1:6.02:.05, 3:9.02:.05]
pos = np.empty(x.shape + (2,))
pos[:, :, 0] = x; pos[:, :, 1] = y
z = dist.pdf(pos)
plt.contourf(x,y,z)
plt.show()