Matplotlib Exercise
Exercise 1: plotting a function
Plot the function
f(x)=sin2(x−2)e−x2
f
(
x
)
=
sin
2
(
x
−
2
)
e
−
x
2
over the interval [0,2]. Add proper axis labels, a title, etc.
import numpy as np
import matplotlib.pyplot as plt
f, ax = plt.subplots(1, 1, figsize=(5, 4))
x = np.linspace(0, 2, 1000)
print("x =\n", x)
y = np.multiply(np.power(np.sin(x-2), 2), np.exp(-np.power(x, 2)))
print("y=", y)
ax.plot(x, y)
ax.set_xlim((0, 2))
ax.set_ylim((0, 1))
ax.set_xlabel("$x$")
ax.set_ylabel("$y=f(x)$")
ax.set_title("$f(x)=\sin^2(x-2)e^{-x^2}$")
plt.tight_layout()
plt.show()
Exercise 2: Data
Create a data matrix X with 20 observations of 10 variables. Generate a vector b with parameters Then generate the response vector y = Xb+z where z is a vector with standard normally distributed variables.
Now (by only using y and X), find an estimator for b, by solving
b^=argminb||Xb−y||2
b
^
=
arg
min
b
|
|
X
b
−
y
|
|
2
Plot the true parameters b and estimated parameters ˆ b. See Figure 1 for an example plot.
import numpy as np
import matplotlib.pyplot as plt
f, ax = plt.subplots(1, 1, figsize=(5, 4))
X = np.random.rand(20, 10) * 10
b = np.random.rand(10)
z = np.random.normal(size=20)
y = X.dot(b) + z
b_hat = np.array(np.linalg.lstsq(X, y, rcond=-1)[0])
ax.plot(b, label='b')
ax.plot(b_hat, label="$\hat{b}$")
ax.set_xlim(0, 10)
ax.set_ylim(-0.5, 1.5)
ax.set_title("Data")
plt.legend()
plt.show()
Exercise 3: Histogram and density estimation
Generate a vector z of 10000 observations from your favorite exotic distribution. Then make a plot that shows a histogram of z (with 25 bins), along with an estimate for the density, using a Gaussian kernel density estimator (see scipy.stats). See Figure 2 for an example plot.
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 10000)
z = np.random.normal(size=10000)
e = stats.gaussian_kde(z).evaluate(x)
f, ax = plt.subplots(1, 1, figsize=(5, 4))
ax.hist(z, bins=25, density=True, color='b', edgecolor='black', label="z")
ax.plot(x, stats.norm.pdf(x), color="r", label='Normal Dist')
ax.plot(x, e, color="g", label='Gaussian KDE')
ax.set_title("Histogram and Density Estimation")
plt.legend()
plt.show()