吴恩达机器学习week1作业知识小总结(python)

1.在写这个小作业的过程中,注意力不断被其他内容吸引,导致过程拖沓,低效。以后完成一个任务应设定好完成的时间,并专注于此。
2.代码不优美,需考虑复用性,相同功能的function放在一个.py文件中通过import使用。变量名错乱导致错误,需要规范变量名的命名。
3.numpy 与pyplot模块可以说是第一次接触,边学边用,多总结。面对不熟悉的东西,人的第一反应是害怕。坚持下去就好。

numpy模块

1.loadtxt()

np.loadtxt()用于从文本加载数据。返回一个ndarray类型数组。
文本文件中的每一行必须含有相同的数据。
loadtxt(fname, dtype=<class ‘float’>, comments=’#’, delimiter=None, converters=None,
skiprows=0, usecols=None, unpack=False, ndmin=0)
参数:
fname:要读取的文件、文件名、或生成器。
dtype:数据类型,默认float。
comments:注释。
delimiter:分隔符,默认是空格。
skiprows:跳过前几行读取,默认是0,必须是int整型。
usecols:要读取哪些列,0是第一列。例如,usecols = (1,4,5)将提取第2,第5和第6列。默认读取所有列。
unpack如果为True,将分列读取。
ex.

data=np.loadtxt('ex1data2.txt',delimiter=',')

2.读取numpy数组

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
type(x)#<class 'numpy.ndarray'>
x.shape #(2,3)
x.size #6
x[0:2, 0]   #取第0列第0到第1个数据
x[:, 0]     #取第0列所有数据
x[:, 0:2]     #取第0,1列所有数据

output

array([1, 4])
array([1, 4])
array([[1, 2],[4, 5]])

3.arange()与linspace()

两者都生成numpy数组

np.arange(1,100,10) #10为步长
np.linspace(1,10,1) #1为个数
np.linspace(1,100,5) #5为个数

output

array([ 1, 11, 21, 31, 41, 51, 61, 71, 81, 91])
array([1.])
array([  1.  ,  25.75,  50.5 ,  75.25, 100.  ])

range(10)一般用于for循环迭代

4.一维数组向量与二维数组向量的区别,以及构造numpy数组的方法(ones(),zeros())

x1=np.arange(5).reshape(5,1)
x2=np.arange(5).reshape(1,5)
x3=np.arange(5).reshape(5,)
x4=np.ones(5)
x5=np.ones((5,1))#构造全为1的numpy数组
x6=np.ones((1,5))
x7=np.zeros((2,3)) #构造全为0的numpy数组
x8=x3.T

x3,x4这种为一维numpy数组,既表示行向量也表示列向量,转置后还是原来的样子(因为存储结构是数组)。输出为

x1:
[[0]
 [1]
 [2]
 [3]
 [4]] 
x2: [[0 1 2 3 4]]
x3: [0 1 2 3 4]
x4:[1. 1. 1. 1. 1.]
x5: [[1.]
 [1.]
 [1.]
 [1.]
 [1.]]
x6: [[1. 1. 1. 1. 1.]]
x7:
 [[0. 0. 0.]
 [0. 0. 0.]]
 x8:
 [0 1 2 3 4]
y1=np.arange(15).reshape(5,3)
y2=np.arange(5).reshape(5,)
y3=np.arange(5).reshape(5,1)
y4=np.c_[y2,y1]
y5=np.c_[y3,y1]

y2为1维向量,y3为2维向量。当他们与二维矩阵合并时是一样的。

y4:
[[ 0  0  1  2]
 [ 1  3  4  5]
 [ 2  6  7  8]
 [ 3  9 10 11]
 [ 4 12 13 14]] 
 y5:
 [[ 0  0  1  2]
 [ 1  3  4  5]
 [ 2  6  7  8]
 [ 3  9 10 11]
 [ 4 12 13 14]]

np.dot(a,b),但a,b都为一维矩阵的时候,.dot实现内积.

5.矩阵合并

有两种方法,分别是np.c_[a,b] /np.r_[a,b] 和 np.concatenate((a1,a2,…),axis=0)
np.c_[a,b]#把两矩阵左右相加,要求行数相等
np.r_[a,b]#把两矩阵上下相加,要求列数相等
np.concatenate((a1,a2,…),axis=0)#axis为合并的维度
axis=1时相当于.c_[a,b] (列合并), axis=1时相当于.r_[a,b](行合并)

>>> a=np.array([[1,2,3],[4,5,6]])
>>> b=np.array([[11,21,31],[7,8,9]])
>>> np.concatenate((a,b),axis=0)#传入的数组必须具有相同的形状,这里的相同的形状可以满足在拼接方向axis轴上数组间的形状一致即可
array([[ 1,  2,  3],
      [ 4,  5,  6],
      [11, 21, 31],
      [ 7,  8,  9]])

.c_和.r_可以将一维向量与二维向量进行拼接,但.concatenate()不行。

6.numpy数据组的求和,平均数,标准差

>>> np.sum([[0, 1], [0, 5]], axis=0)    #axis=0是按列求和
array([0, 6])
>>> np.sum([[0, 1], [0, 5]], axis=1)    #axis=1 是按行求和
#实际上这个axis=0就是选择shape中第一个元素(即第一维)变为1,axis=1就是选择shape中第二个元素变为1。用shape来看会比较方便。
#不给出axis不是默认axis为0,而是把所有元素加起来求平均

mu = np.mean(x, axis=0)#axis=0计算每一列的平均数
sigma = np.std(x, axis=0)#axis=0计算每一列的平均数
x_norm = np.divide(x-mu,sigma)
#divide除以,n维矩阵减1维矩阵,会将n维矩阵的每一个维度都减去该一维矩阵

7.矩阵的运算

linalg.pinv(a)#求a矩阵的伪逆
x1,dot(x2)#等价于np.dot(x1,x2)

8.生成二维网格(用于plot三维图像)

x_theta0=np.linspace(-3,3,8)
y_theta0=np.linspace(-2,2,8)
[X,Y]=meshgrid(x_theta0,y_theta0) #生成一个坐标轴上的矩阵
X= 
  -3 -2 -1 0 1 2 3 
  -3 -2 -1 0 1 2 3 
  -3 -2 -1 0 1 2 3 
  -3 -2 -1 0 1 2 3 
  -3 -2 -1 0 1 2 3 
  Y = 
  -2 -2 -2 -2 -2 -2 -2 
  -1 -1 -1 -1 -1 -1 -1 
  0 0 0 0 0 0 0 
  1 1 1 1 1 1 1 
  2 2 2 2 2 2 2

pyplot模块

1.二维图像

plt.plot(x,y,format_string,**kwargs) format_string is ‘style cycle’

1.marker:点的形状 marker=“o”
2.线宽: linewidth=1
3.线条颜色:color=‘red’
4.图例 Legend、网格 Grid,刻度 tick,点 Markers,边框线 Spines,标签 Label
设置行标签与列标签:plt.xlabel(‘随机变量:表白第k次才首次成功’)
5.设置标题:plt.title(‘几何分布:p=%.2f’ % p)
6.绘制图形:plt.show()

plt.plot(X, Y, 'g+', label='point',linewidth=2)
plt.xlabel('population')
plt.ylabel('profit')
plt.title('')
#plt.ion()#Turn interactive mode on.
plt.legend()#显示图标
plt.figure(0)#创建图表0
plt.axis([-1,10,0,6]) #axis 函数为x轴范围【-1,10】,y【0,6】 
plt.xlabel(‘sdf’) #x轴
plt.ylabel(‘sdf’) #y轴
plt.show()
plt.savefig(‘test’,dpi=600) #图像保存,默认为png格式 

2.三维图像

x,y,z上的数据,需要先对x、y数据执行网格化,如上面8.对x、y数据执行网格化

xx,yy=np.meshgrid(x_theta0,y_theta0)
z_J=np.zeros(xx.shape)
for i in range(0,x_theta0.size):
	for j in range(0,y_theta0.size):
		theta=np.array([x_theta0[i],y_theta0[j]])
		z_J[i][j]=GD.compute_cost(X,Y,theta)

fig = plt.figure(1)
ax = fig.gca(projection='3d')  #得到一个Axes3D对象
ax.plot_surface(xx, yy, z_J)
plt.show()

3.等高图(不完整,待填坑)

plt.figure(2)
lvls = np.logspace(-2, 3, 20)#等高线密度
# 画等高线
plt.contour(xx, yy, z_J, levels=lvls, norm=LogNorm())#norm=LogNorm()颜色的渐变函数
plt.plot(theta[0], theta[1], c='r', marker="x") #画一点(最小值)
plt.show()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值