距离与相似度计算

一.余弦相似度

加速计算参考这篇文章

from math import *def square_rooted(x):return round(sqrt(sum([a*a for a in x])), 3)def cosine_similarity(x,y):numerator = sum(a*b for a, b in zip(x,y))denominator = square_rooted(x)*square_rooted(y)return round(numerator/float(denominator),3)res = cosine_similarity([1, 0], [0,1])
print('==res:', res)

二.欧式距离

from math import *
def euclidean_distance(x, y):return sqrt(sum(pow(a - b, 2) for a, b in zip(x, y)))res = euclidean_distance([0, 1], [1, 0])
print('res:', res)

三.曼哈顿距离

from math import *def manhattan_distance(x,y):return sum(abs(a-b) for a, b in zip(x,y))
print(manhattan_distance([1, 0], [0, 1]))

四.汉明距离

两个等长字符串在对应位置上不同字符的数目。


def hamming_distance(s1, s2):"""Return the Hamming distance between equal-length sequences"""if len(s1) != len(s2):raise ValueError("Undefined for sequences of unequal length")return sum(a != b for a, b in zip(s1, s2))res = hamming_distance('12','13')
print('res:', res)

五.切比雪夫距离

切比雪夫距离起源于国际象棋中国王的走法,国际象棋中国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1,y1)走到B格(x2,y2)最少需要走几步?你会发现最少步数总是max(|x2-x1|,|y2-y1|)步。有一种类似的一种距离度量方法叫切比雪夫距离。

def chebyshev_distance(p, q):assert len(p) == len(q)return max([abs(x - y) for x, y in zip(p, q)])
res = chebyshev_distance([0,0], [1,3])
print('res:', res)

六.兰氏距离

def canberra_distance(p, q):n = len(p)distance = 0for i in range(n):if p[i] == 0 and q[i] == 0:distance += 0else:distance += abs(p[i] - q[i]) / (abs(p[i]) + abs(q[i]))return distanceres = canberra_distance([1,0], [0,1])
print('res:', res)

七.闵可夫斯基距离

p=2即为欧氏距离,而p=1时则为曼哈顿距离。当p取无穷时的极限情况下,可以得到切比雪夫距离:

def minkowski_distance(p, q, n):assert len(p) == len(q)return sum([abs(x - y) ** n for x, y in zip(p, q)]) ** (1. / n)res = minkowski_distance([1, 0], [0, 1], n=2.)
print('res:', res)

八.编辑距离

编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符插入一个字符删除一个字符

方法1:调包

import Levenshtein
texta = '者記聞新'
textb = '浪(第'
print(Levenshtein.distance(texta, textb))

方法2:动态规划

import os
import numpy as np
def edit_distance(S1,S2):#S1列 S2行mat = [[0] *(len(S1)+1) for i in range(len(S2)+1)]# print('mat:', mat)for i in range(len(S2)):mat[i+1][0] = mat[i][0]+1# print('mat:', mat)for i in range(len(S1)):mat[0][i+1] = mat[0][i]+1# print('mat:\n', np.array(mat))#相等就为0 不想等加1for i in range(len(S2)):for j in range(len(S1)):if S2[i] == S1[j]:# print('S2[i]:', S2[i])mat[i + 1][j + 1] = min(mat[i][j] + 0, mat[i + 1][j]+1, mat[i][j + 1]+1)else:mat[i + 1][j + 1] = min(mat[i][j] + 1, mat[i + 1][j]+1, mat[i][j + 1]+1)# print('mat:\n', np.array(mat))dis = mat[-1][-1]print('dis:', dis)return dis
# S1 = 'iva1'
# S2 = 'iva'
S2 = '者記聞新'
S1 = '浪(第'
dis = edit_distance(S1, S2)
print('dis:', dis)

九.杰卡德相似度


def jaccard_sim(a, b):unions = len(set(a).union(set(b)))intersections = len(set(a).intersection(set(b)))return intersections / unionsa = ['1', '0']
b = ['1', '1', '1']
res = jaccard_sim(a, b)
print('res:', res)

十.Dice距离

def dice_coefficient(a, b):"""dice coefficient 2nt/na + nb."""intersections = len(set(a).intersection(set(b)))return intersections * 2.0/(len(set(a)) + len(set(b)))res =  dice_coefficient(a = [1, 0], b =[0, 1])
print('===res:',res)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G 产业链重要细分投资领域

来源:乐晴智库精选▌2019年全球电子产业将保持增长ICInsights预计2018年全球电子产品销售额16220亿美元,同比增长5.1%,2019年将达到16800亿美元,同比增长3.5%,2017~2021年CAGR4.6%。预计2019年通信市场销售额5350亿美元…

CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection

CPNDet论文链接 一.背景 anchor-based方法将大量框密集分布在feature map上,在推理时,由于预设的anchor与目标差异大,召回率会偏低。而anchor-free不受anchor大小限制,在任意形状上会更加灵活,但是像CornerNet这种,先…

Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建

Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习。2010年9月,Oracle Enterprise Linux发布新版内核——Unbreakable Enterprise Kernel,专门针对Oracle软件与硬件进行优化,最重要的是Oracl…

最权威北美放射学会年会回顾:AI的进化与下一个前沿

翻译 : 高璇摘要:人工智能在成像领域的前景必须为终端用户带来时间节省、资源优化、精度增益和感知增益(接近精准健康方法)。前两个是指生产力方面,而后两个是指质量方面。人工智能在成像领域的脚步不会停留在这里——它已经帮助重…

Registry注册机制

前言:不管是Detectron还是mmdetection,都有用到这个register机制,特意去弄明白,记录一下。 首先看Registry代码: # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reservedfrom typing import Dict, Optional, Iterable, T…

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库,后者是 Android 自带 API。企业级应用&#xff0…

python刷题+leetcode(第二部分)

100. 简化路径 思路:栈 class Solution:def simplifyPath(self, path: str) -> str:stack []for path_ in path.split(/):if path_ not in [, ., ..]:stack.append(path_)elif path_ .. and stack:stack.pop()return / /.join(stack) c实现: class Solution { public:s…

这一年,信息技术领域上演的“断舍离”

来源:中国科学报摘要:刚刚踏入2018年,信息技术产业领域就被“熔断”“幽灵”这两个几乎波及全行业的芯片漏洞所笼罩。孰料,该领域接下来上演的剧情——从美国断然发布对中兴通讯的出售禁令,到Uber无人驾驶汽车撞人致死…

利用JasperReport+iReport进行Web报表开发

用JasperReportiReport进行Web报表开发 序言在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来。这里所提到的报表可不是简单的二维表,而是拥有复杂表头的、多维的、能够在执行期从数据库中自己主动读…

AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(VIT)

最近看transformer用于CV比较热门,特意去进行了解,这里用分类的一篇文章进行讲解。 NLP中的transformer和代码讲解参考我另一篇文章。 论文链接:AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 一.思想 其…

人工智能领域的未来和挑战

来源:创新研究摘要:人工智能是一门综合了计算机科学、生理学、哲学的交叉学科。凡是使用机器代替人类实现认知、识别、分析、决策等功能,均可认为使用了人工智能技术。作为一种基础技术,人工智能在很多行业都有广泛应用。五道集团…

2018年科技公司融资纪录十大排行榜!中国四家公司上榜

来源:网易智能摘要:国外媒体近日盘点了2018年全球融资最多的十家机器人技术公司,中国有四家公司上榜,包括商汤科技、优必选、京东和依图科技。获得融资并不能保证取得成功,这是机器人行业在2018年学到的艰难的一课。今…

tensorrt基础知识+torch版lenet转c++ trt

官网文档 API文档 Docker镜像 自定义Plugin仓库 0.安装 1.安装tensorrt 从官网下载.deb包,要注意的是cuda版本 sudo dpkg -i nv-tensorrt-repo-ubuntu1604-cuda10.0-trt7.0.0.11-ga-20191216_1-1_amd64.deb sudo apt update sudo apt install tensorrt Engine plan 的兼…

《自然》预测2019年重大科学事件

携带传感器的象海豹将帮助研究人员收集海洋数据,这是研究南极洲思韦茨冰川任务的一部分。来源:科技日报新年的钟声即将响起,在此辞旧迎新之际,除了埋头总结过去一年的得失,回味一下往事的喜乐,也应该抬头展…

python刷题+leetcode(第三部分)

200.最大正方形 思路:与岛屿,水塘不同的是这个相对要规则得多,而不是求连通域,所以动态规划构造出状态转移方程即可 动态规划 if 0, dp[i][j] 0 if 1, dp[i][j] min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])1 class Solution:def maximalSqu…

在ubuntu 12.04 x64下编译hadoop2.4

自己编译hadoop:x64 1.安装依赖包 sudo apt-get install g autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev openssh-server maven openssh-client 2.下载hadoop源码 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.4.0/hadoop…

中科院脑科学与智能技术卓越创新中心:在“脑海”中突破进取

来源:中国科学报 2017年底,“中中”和“华华”两个可爱的小猴子降临人世,标志着中国率先开启了以体细胞克隆猴作为实验动物模型的新时代。这是继2016年建立食蟹猴自闭症模型后,中科院脑科学与智能技术卓越创新中心再一次取得非人灵…

python(c++)刷题+剑指offer

03. 数组中重复的数字 思路:hash class Solution:def findRepeatNumber(self, nums: List[int]) -> int:dict_ dict()for i in range(len(nums)):if nums[i] in dict_:return nums[i]else:dict_[nums[i]] i class Solution { public:int findRepeatNumber(vector<int…

erlang开发环境配置

第一步 从源码安装erlang git clone https://github.com/erlang/otp 目前最新版本为17.X cd otp/ ./configer 检查编译环境 sudo make & make install 编译并安装 我是在ubuntu 系统下配置的 其余的linux 环境我是直接切换到root用户操作 这样安装需要自己一个一个解决…

美国免费为全世界提供GPS服务,为什么中国还要搞“北斗”?

来源&#xff1a;雷锋网摘要&#xff1a;12月27日&#xff0c;在国务院新闻办公室新闻发布会上&#xff0c;中国卫星导航系统管理办公室主任、北斗卫星导航系统新闻发言人冉承其宣布——北斗三号基本系统完成建设&#xff0c;于今日开始提供全球服务。这标志着北斗系统服务范围…