I am working on the following code from this link . I have a question: in the mentioned link the following code lead to a plot. But running this code does not plot any thing. what should be added?
import numpy as np
import scipy.stats as st
import seaborn as sns
mus = np.array([5, 5])
sigmas = np.array([[1, .9], [.9, 1]])
def circle(x, y):
return (x-1)**2 + (y-2)**2 - 3**2
def pgauss(x, y):
return st.multivariate_normal.pdf([x, y], mean=mus, cov=sigmas)
def metropolis_hastings(p, iter=1000):
x, y = 0., 0.
samples = np.zeros((iter, 2))
for i in range(iter):
x_star, y_star = np.array([x, y]) + np.random.normal(size=2)
if np.random.rand() < p(x_star, y_star) / p(x, y):
x, y = x_star, y_star
samples[i] = np.array([x, y])
return samples
if __name__ == '__main__':
samples = metropolis_hastings(circle, iter=10000)
sns.jointplot(samples[:, 0], samples[:, 1])
samples = metropolis_hastings(pgauss, iter=10000)
sns.jointplot(samples[:, 0], samples[:, 1])
Thank you for your help.
As reported by @Mr. T and also in Seaborn plots not showing up , you should add plt.show()
. plt
has to be imported from matplotlib.
So your code should read:
import numpy as np
import scipy.stats as st
import seaborn as sns
import matplotlib.pyplot as plt
mus = np.array([5, 5])
sigmas = np.array([[1, .9], [.9, 1]])
def circle(x, y):
return (x-1)**2 + (y-2)**2 - 3**2
def pgauss(x, y):
return st.multivariate_normal.pdf([x, y], mean=mus, cov=sigmas)
def metropolis_hastings(p, iter=1000):
x, y = 0., 0.
samples = np.zeros((iter, 2))
for i in range(iter):
x_star, y_star = np.array([x, y]) + np.random.normal(size=2)
if np.random.rand() < p(x_star, y_star) / p(x, y):
x, y = x_star, y_star
samples[i] = np.array([x, y])
return samples
if __name__ == '__main__':
samples = metropolis_hastings(circle, iter=10000)
sns.jointplot(samples[:, 0], samples[:, 1])
samples = metropolis_hastings(pgauss, iter=10000)
sns.jointplot(samples[:, 0], samples[:, 1])
plt.show()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.