1. Plotting a function:
代码如下:
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(0,2,0.01)
y=np.sin((x-2)*np.exp(-x**2))**2
plt.plot(x,y)
plt.xlabel('x label')
plt.ylabel('y label')
plt.title('Plotting a function')
plt.show()
运行结果:
2. Data :
分析在代码的注释中。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
X=np.random.randint(1,10,size=(20,10))
b=np.random.randint(1,10,size=(10,1))
z=np.random.normal(0,1,size=(20,1)) #首先把X矩阵和向量b,正态分布向量z创建好
y=np.dot(X,b)+z #把y向量算出来
def err(b,X,y):
b=b.reshape(10,1)
ans=np.dot(X,b)-y
return ans.reshape(-1) #因为需要返回的是行向量而不是列向量,所以让ans变形
after_b=leastsq(err,b,args=(X,y)) #通过调用leastsq函数算出b的最小二乘,err为误差函数。
after_b=after_b[0] #返回的第一个元素就是b的最小二乘后的tuple
x = np.array(range(0,10)) #用x来标记第几个参数
plt.scatter(x,list(b),marker='x', label='True') #将原来的b和最小二乘后的b都打印出来,通过图像做对比。
plt.scatter(x,list(after_b),marker='.', label='Estimated')
plt.xlabel('index')
plt.ylabel('value')
plt.legend()
plt.show()
结果如下:
符合期望。
3. :
不会做,在寻求同学的帮助后,在 http://jpktd.blogspot.hk/2009/03/using-gaussian-kernel-density.html
中找到了参考的代码,学习后对照着打了一个。
代码如下:
import numpy as np
from scipy import stats
import matplotlib.pylab as plt
z = np.random.normal(0,4,size=(10000))
gkde=stats.gaussian_kde(z)
ind = np.linspace(-10,20,101)
kdepdf = gkde.evaluate(ind)
plt.figure()
# plot histgram of sample
plt.hist(z, bins=25, normed=True, color='r',edgecolor='black')
# plot estimated density
plt.plot(ind, kdepdf, label='kde', color="b")
plt.title('Kernel Density Estimation')
plt.legend()
plt.show()
结果如下: