最近在入门机器学习,看到《机器学习实战》一书中经常出现numpy.tile()函数。于是记录下这个函数的用法。
虽然看过了网上不少大佬的文章,但还是认为看官方的纯英文文档理解得好(尽管现在英文水平不行)。
函数原型: Numpy.tile(A,reps)
其中A和reps都是array_like的参数,A可以是array,list,tuple,matrix以及基本数据类型;reps的类型可以是tuple,list,dict,array,int,bool。
以机器学习实战中的kNN算法代码为例
def classify0(inX,dataSet,labels,k): #分类器(搞懂函数后,总算对这个代码有所理解)
dataSetSize = dataSet.shape[0] #shape[0]返回矩阵第一维度的长度
diffMat = tile(inX,(dataSetSize,1))-dataSet #按行复制,将输入向量扩展到和dataset一样的函数,再减去dataset
#输入向量inX在行复制dataSetSize次,列复制一次
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1) #按行相加求和
distances = sqDistances**0.5 #距离计算
sortedDistIndicies = distances.argsort() #argsort()排序后,返回下标向量
classCount={} #初始化一个字典,也就是C++的map
for i in range(k): #通过循环,依次求出前k个距离的下标,映射到labels,找出对应分类
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 #字典:{'标签':出现次数}
#返回指定键的值,如果值不在字典就返回默认值
#选择距离最小的k个点
sortedClassCount = sorted(classCount.items(),#Python3已经不支持iteritems()
key=operator.itemgetter(1),
reverse=True)
#第一个参数可以为list、iterator.第二个参数为cmp函数(指定排序时进行比较的函数)
#第三个参数key为函数,指定取待排序元素的哪一项进行排序.第四个参数reverse选择升序还是降序
#false为升序(默认)
#排序
return sortedClassCount[0][0]
diffMat = tile(inX,(dataSetSize,1))-dataSet
表示把输入向量inX复制(dataSetSize行,1列)次
横向扩展为原来为的2倍(按列复制)
横向、纵向均扩展为原来的2倍(按行、列扩展)
三个维度的进行扩展,第一个参数代表的是几块
看到有位博主写的关于tile()函数方法的介绍不错,附上链接
https://blog.csdn.net/qq_38669138/article/details/79085700
numpy官方关于tile()函数的英文技术文档链接
https://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html