Python 矩阵相关知识

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

"""


猜你喜欢

转载自blog.csdn.net/weixin_39781462/article/details/80957736