高中时如何计算向量的乘积吗?(附答案)

高中时如何计算向量的乘积吗?(附答案)

前言

还记得你在高中时是如何计算向量乘积的吗?

背景

在做数据分析的时候,经常会出现名字匹配的场景。如果两个名称相同,则很容易处理。如果两个名字不同,一个叫老王,一个叫王,或者一个叫小兔兔,一个叫小白兔,那就不好办了。 .

原则

两个字符串,虽然可以比较,但是s不能计算。只能计算数字和向量。如果将字符串映射到数字,则会丢失很多功能。毕竟,数字是一维的。自然地,我们想到将字符串映射成向量音乐,并通过计算它们之间的角度来判断两个向量。字符串相似度

文本矢量化

比如有两个字符串,'Little Rabbit','Little Rabbit';将字符串一一拆分成元素进行并集unity c# 查询列表 字符串相似度排序,得到 {'Little', 'Rabbit', 'Child'} ,以这个并集为基,然后在这个基下unity c# 查询列表 字符串相似度排序

'小兔子'的坐标是 (1, 1, 1)

'小兔子'的坐标是(1, 2, 0)

这样对文本进行向量化可以保存字符串中的大部分信息创作人,但也会丢失信息,比如字符串中元素的顺序

代码

#定义向量乘积
def vec_multi(vec1 , vec2):         
    add = 0
    for a,b in zip(vec1,vec2):  
        add += (a*b)
    return add
#定义相似度
def Similarity(name1,name2):
    name1_list = list(name1)
    name2_list = list(name2)
    #求可表示两个字符串的基
    a1 = set(name1)
    a2 = set(name2)
    name_list.extend(list(name2))  
    all_set = a1 | a2  
    all_set_list = list(all_set)
    #文本向量化
    name1_vec = [0]*len(all_set_list)       
    for word in name1_list:
        if word in all_set_list:
            name1_vec[all_set_list.index(word)] += 1
    name2_vec = [0]*len(all_set_list)        
    for word in name2_list:
        if word in all_set_list:
            name2_vec[all_set_list.index(word)] += 1
    cosvec = vec_multi(name1_vec , name2_vec) / ((vec_multi(name1_vec , name1_vec)*vec_multi(name2_vec , name2_vec))**0.5)
    if cosvec>=0.5:
        print("两个名字很相似,相似度为:%.2f%%" %(cosvec*100))
    else:
        print("两个名字不相似,相似度为:%.2f%%" %(cosvec*100))

测试

单位换算字符排序_unity c# 查询列表 字符串相似度排序_unity c# 查询列表 字符串相似度排序

总结