Il ressemble à ce que vous cherchez est un Multivariate Normal Distribution. Ceci est mis en œuvre dans Scipy comme scipy.stats.multivariate_normal. Il est important de se rappeler que vous passez une matrice de covariance à la fonction. Donc, pour garder les choses simples garder les éléments diagonaux zéro:
[X variance , 0 ]
[ 0 ,Y Variance]
Voici un exemple en utilisant cette fonction et générer un tracé 3D de la distribution résultante. J'ajoute la palette de couleurs pour faire voir les courbes plus facilement mais n'hésitez pas à l'enlever.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
from mpl_toolkits.mplot3d import Axes3D
#Parameters to set
mu_x = 0
variance_x = 3
mu_y = 0
variance_y = 15
#Create grid and multivariate normal
x = np.linspace(-10,10,500)
y = np.linspace(-10,10,500)
X, Y = np.meshgrid(x,y)
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X; pos[:, :, 1] = Y
rv = multivariate_normal([mu_x, mu_y], [[variance_x, 0], [0, variance_y]])
#Make a 3D plot
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, rv.pdf(pos),cmap='viridis',linewidth=0)
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
plt.show()
vous donnant cette parcelle:
Modifier
Une simple verision est avalible par matplotlib.mlab.bivariate_normal Il prend les arguments suivants de sorte que vous n'avez pas à vous soucier de matrices matplotlib.mlab.bivariate_normal(X, Y, sigmax=1.0, sigmay=1.0, mux=0.0, muy=0.0, sigmaxy=0.0)
ici X, et Y sont à nouveau le résultat d'un meshgrid donc en utilisant ceci pour recréer l'intrigue ci-dessus:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.mlab import biivariate_normal
from mpl_toolkits.mplot3d import Axes3D
#Parameters to set
mu_x = 0
sigma_x = np.sqrt(3)
mu_y = 0
sigma_y = np.sqrt(15)
#Create grid and multivariate normal
x = np.linspace(-10,10,500)
y = np.linspace(-10,10,500)
X, Y = np.meshgrid(x,y)
Z = bivariate_normal(X,Y,sigma_x,sigma_y,mu_x,mu_y)
#Make a 3D plot
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z,cmap='viridis',linewidth=0)
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
plt.show()
Donner:
Pouvez-vous définir la distribution 'común'? matplotlib3d a beaucoup d'exemples qui peuvent vous aider à faire ce que vous avez besoin http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html – jm22b