《高级编程技术》作业[16]——Matplotlib练习题三道

本次作业是CME 193 Introduction to Python一书中关于Matplotlib库的练习部分。


为了简化表述,下面的说明中用np来指代numpy,用plt来指代matplotlib



第一题:    

    为了完成本题,我们需要:
    1.使用np.linspace来生成[0,2]区间任意数量的横轴坐标
    2.使用np.sin和np.exp等函数来完成f(x)函数值的求解。
    3.使用plt.plot来作图。
    4.使用plt.xlabel, plt.ylabel来生成坐标轴标签,用plt.title来生成图像标题。


程序的整体逻辑非常简单,代码如下:

import numpy as np
import matplotlib.pyplot as plt 

X = np.linspace(0, 2, 500) #在[0,2]之间选取500个坐标点
Y = (np.sin(X-2) ** 2) * (np.exp(-X**2))

plt.plot(X, Y)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('11_1 exercises')
plt.show()

运行出来的结果是这样的:



第二题:    

    为了完成本题,我们需要:
    1.使用np.random里面的rand生成随机数(给X, b使用),使用randn生成符合标准正态分布的随机数(给z使用)。

    2.使用np.matmul来进行矩阵乘法运算,求出y的值出来。

    3.使用np.linalg.lstsq来进行最小二乘估计,求出题目中的值。

    4.使用plt.scatter以散点图的方式将真实的b值和估计的b值画出。

    5.使用plt.legend来给散点图添加上图例。


同样,程序的整体逻辑也并不复杂, 代码如下:

import numpy as np
import matplotlib.pyplot as plt 

x = np.random.rand(20, 10)
b = np.random.rand(10, 1)
z = np.random.randn(20,1)
y = np.matmul(x,b) + z

print(y.size)

b_estimate = np.linalg.lstsq(x, y)[0]

est  = plt.scatter(np.linspace(0, 9, 10), b_estimate, color = 'b', marker='o')
true = plt.scatter(np.linspace(0, 9, 10), b, color = 'r', marker='x')
plt.legend((true,est), ('True coefficients', 'Estimated coefficients'), loc='higher right')
plt.show()

运行的结果如下:



注:因为这里方程中的数都是随机生成的,所以每次运行得到的结果是不一样的。


第二题:    

   

第二题:    

    对于z的取值,我选择10000个标准正态分布的观察值。

    为了完成本题,我们需要:

    1.使用np.random.randn来随机生成10000个符合标准正态分布的观测值。

    2.使用plt.hist来生成直方图。其中第一个参数是得到的观测数据,第二个参数是直方的数量。在后面同样也可以加入一些其他的参数来控制直方图的样式、归一化等。

    3.使用scipy.stats.gaussian_kde来获取z数据的概率分布估计核。注意,得到的返回值k_d并不能直接用来画图。要以横轴坐标为x_grid为参数,调用k_d的内置函数pdf才能得到概率分布的估计值。

    4.使用plt.plot来画出概率分布的曲线。

本题的程序逻辑也十分简单。但scipy.stats.gaussian_kde的用法值得注意。

代码如下:

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt 

bin = 25
observe = 10000


z = np.random.randn(observe)
x_grid = np.linspace(np.min(z), np.max(z), 1000)

n, bins, patches = plt.hist(z, bin, normed= True, facecolor='g', alpha=0.75)

k_d = stats.gaussian_kde(z)


plt.plot(x_grid, k_d.pdf(x_grid))
plt.grid(True)
plt.show()

运行结果如下:






版权声明:本文为qq_36184813原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36184813/article/details/80467398