高级编程技术 第十二周作业

本周讲了matplotlib,一个用于绘制图像的库。要求用numpy和matplotlib来完成三道练习题。

Exercise 11.1: Plotting a function

在区间[0,2]上绘制函数f(x) = sin^2^(x - 2)e^-x^2^^。要求加上轴标签和标题。

matplotlib的画图用法跟matlib基本一样,因此只需要按照matlib的步骤来绘制图像即可。由于只有一张图,所以不需要使用子图来绘制。

import math
import matplotlib.pyplot as mplt

x = []
for i in range(0, 201):
    x.append(i / 100)
y = []
for i in x:
    y.append(math.sin(i - 2) * math.sin(i - 2) * math.exp(-i * i))
mplt.plot(x, y)
mplt.xlabel('X')
mplt.ylabel('Y')
mplt.title('f(x) = sin^2(x - 2)e^(-x^2)')
mplt.show()

Exercise 11.2: Data

生成20x10的矩阵X,然后生成十维向量b,标准正态分布向量z,计算y=Xb+z。并使用b'=argmin||Xb-y||~2~来估计b。并使用散点图比较估计值和真实值。

可以使用numpy.linalg.lstsq来计算b'。同时可以通过更改绘图的参数来得到散点x的效果。

import numpy
import numpy.matlib
import numpy.linalg
import matplotlib.pyplot as mplt

X = numpy.random.random((20, 10))
b = numpy.random.random((10, 1))
z = numpy.random.normal(size=(20, 1))
y = numpy.dot(X, b) + z
bp = numpy.linalg.lstsq(X, y)[0]
xais = range(0, 10)
mplt.plot(xais, b.flat, 'rx', label='True parameter')
mplt.plot(xais, bp.flat, 'bo', label='Estimated parameter')
mplt.hlines(0, 0, 9, linewidth=1, colors='grey')
mplt.xlim((0, 9))
mplt.legend()
mplt.show()


Exercise 11.3: Histogram and density estimation

选定一个分布并生成10000个观测值,使用histogram以bins=25为参数绘制图,并加上密度的估计曲线。

import numpy
import numpy.linalg
import matplotlib.pyplot as mplt
import scipy.stats

numpy.random.seed(0)
z = numpy.random.laplace(size=10000)
f, ax = mplt.subplots()
n, bins, patches = ax.hist(z, bins=25, normed=True, align='mid')
y = scipy.stats.rv_histogram(numpy.histogram(z, bins=25)).pdf(bins)
ax.plot(bins, y, linewidth=1, color='r')
mplt.show()

猜你喜欢

转载自blog.csdn.net/Dexan_N/article/details/80496029