目录

ML中Python的零落知识点

目录

库的选择

使用numpy而不要使用math,因为math中的函数对向量不支持,而机器学习中大多是对向量进行操作

numpy.tile(A,B)

numpy.tile([1,2],3)  #在一维方向上复制3次,即[1,2,1,2,1,2]
numpy.tile([1,2],(2,3))  #在二位空间上复制2行3列,即[[1,2,1,2,1,2],[1,2,1,2,1,2]]

numpy.argsort(A)

a = np.array([2,6,4,1])
a.argsort() #返回排序后列表的下标索引,在此例中即[3,0,2,1]

{字典}.get(A,B)

classCount.get(voteIlabel,0) #返回字典classCount中voteIlabel元素对应的值,若无,则进行初始化
#参数A为字典,B为初始化的值,返回为A的键值,若没有A则初始化键A并将其初始化为B

sorted(iterable, key=None, reverse=False)

# iterable -- 可迭代对象。
# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
# classCount为字典,key限定了按照字典的值来排序,而不是按照其键来排,operator.itemgetter(index)为获取第index+1项

其与list.sort()的区别为sort()方法只为list列表定义,而sorted()函数可以接收任何的iterable可迭代对象。

一维矩阵的定义

定义一维矩阵最好为(1,n)或(n,1),不要定义成(n,)或(,n),即一维矩阵也要定义成二维矩阵,故要np.random.rand(1,3)而不是np.random.rand(3)

reshape(2,-1)中参数-1的含义

reshape()后新数组元素数量与原数组元素数量要相等,一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值。即若将一个A(2,4)的矩阵转换成4行的矩阵,则无需手动计算要分多少列,A.reshape(4,-1)会自动计算出分多少列

np.std()求标准差

numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1
pandas.std() 默认是除以n-1 的,即是无偏的,如果想求有偏,需要加上参数ddof=0 ,即pandas.std(ddof=0)

计时

import time
tic = time.process_time()   # 返回当前进程执行CPU的总时间  time.time()返回的时间是当前系统时间
# 要测试的代码....
toc = time.process_time()

print(str(1000*(toc-tic)) + "毫秒")

np.squeeze()维度压缩

将矩阵中维度为1的维度去掉,如A为(10,1)的矩阵,压缩后为(10,)的列表
再如B为(2,1,3)的矩阵,压缩后为(2,3)的矩阵

函数中变量a与self.a的区别

def test():
    a = 1;          # 局部变量
    self.a = 2;     # 全局变量