1. 矩阵求和、相减、求开方、平方、排序
import operator
import numpy as np
dataMat = np.array([[1.0, 1.1],
[1.0, 1.0],
[0, 0],
[0, 0.1]])
Inx = [1,2]
dataSet = len(dataMat)
#1. np.tile() 将Inx 在行方向上复制dataSet行,在列方向复制1列
diffMat = np.tile(Inx,(dataSet,1))
print(diffMat)
"""
打印结果
[[1 2]
[1 2]
[1 2]
[1 2]]
"""
# 2. 矩阵相减
diffMat1 = diffMat - dataMat
print(diffMat1)
# 3. 求平方
sqdiff = diffMat1**2
print(sqdiff )
# 4. 求和 axis=1为每行元素相加 axis=0为每列元素相加
sqdistance = sqdiff.sum(axis=1)
print(sqdistance)
# 5. 求开方
distance = sqdistance**0.5
print(distance)
"""
打印
[0.9 1. 2.23606798 2.14709106]
"""
#6. 排序 X.argsort() 返回的是 从小到大排列的索引值
sortDistance = distance.argsort()
print(sortDistance)
"""
打印
[0 1 3 2]
"""
2. 统计列表中元素出现的次数,进行排序并输出出现次数最多的元素
#1. 初始化一个字典、列表元素
classCount = {}
labels=['A' ,'A' ,'B' ,'B','b','B']
#2. 遍历列表元素,统计元素出现的次数并存储在字典中
for i in range(len(labels)):
voteIlabel = labels[i]
#classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 方法1 统计元素出现的个数,类别为key, 次数为value
if voteIlabel not in classCount: # 方法2 统计元素出现的个数,类别为key, 次数为value
classCount[voteIlabel] = 0
classCount[voteIlabel] += 1
# 3. 按value对字典进行排序
sortedClassCount = sorted(classCount.items(), key = lambda e:e[1], reverse = True) #e[0]按键排序,e[1]按值排序,默认为升序排列
print(classCount) # {'A': 2, 'B': 3, 'b': 1} 统计元素出现的次数
print(sortedClassCount) # [('B', 3), ('A', 2), ('b', 1)] 按value对字典进行排序
print(sortedClassCount[0][0]) # 输出次数最多的元素
"""
classCount.get(voteIlabel,0)返回字典classCount中voteIlabel元素对应的值,若无,则进行初始化
若不存在voteIlabel,则字典classCount中生成voteIlabel元素,并使其对应的数字为0,即
classCount = {voteIlabel:0} 此时classCount.get(voteIlabel,0)作用是检测并生成新元素,
括号中的0只用作初始化,之后再无作用
当字典中有voteIlabel元素时,classCount.get(voteIlabel,0)作用是返回该元素对应的值,即0
"""