五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离

简介: 五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离
from math import*
from decimal import Decimal
 
class Similarity():
 
    """ Five similarity measures function """
 
  def euclidean_distance(self,x,y):
  # 欧式距离
   
          """ return euclidean distance between two lists """
   
          return sqrt(sum(pow(a-b,2) for a, b in zip(x, y)))
   
  def manhattan_distance(self,x,y):
  # 曼哈顿距离
   
          """ return manhattan distance between two lists """
   
          return sum(abs(a-b) for a,b in zip(x,y))
   
  def minkowski_distance(self,x,y,p_value):
  # 闵可夫斯基距离
   
          """ return minkowski distance between two lists """
   
          return self.nth_root(sum(pow(abs(a-b),p_value) for a,b in zip(x, y)),
             p_value)
   
  def nth_root(self,value, n_root):
  # 开n次方
   
          """ returns the n_root of an value """
   
          root_value = 1/float(n_root)
          return round (Decimal(value) ** Decimal(root_value),3)
   
  def cosine_similarity(self,x,y):
  # 余弦相似度
   
          """ return cosine similarity between two lists """
   
          numerator = sum(a*b for a,b in zip(x,y))
          denominator = self.square_rooted(x)*self.square_rooted(y)
          return round(numerator/float(denominator),3)
   
  def square_rooted(self,x):
  # 平方根距离
   
          """ return 3 rounded square rooted value """
   
          return round(sqrt(sum([a*a for a in x])),3)
   
  def jaccard_similarity(self,x,y):
  # 杰卡德距离
   
      """ returns the jaccard similarity between two lists """
   
          intersection_cardinality = len(set.intersection(*[set(x), set(y)]))
          union_cardinality = len(set.union(*[set(x), set(y)]))
          return intersection_cardinality/float(union_cardinality)


相关文章
|
传感器 编解码 数据处理
Open Google Earth Engine(OEEL)——哨兵1号数据的黑边去除功能附链接和代码
Open Google Earth Engine(OEEL)——哨兵1号数据的黑边去除功能附链接和代码
421 0
|
存储 Python
海明距离(Hamming Distance)
海明距离(Hamming Distance)是用来衡量两个二进制数之间差异程度的指标,它表示两个二进制数之间最多有多少个比特的差异。海明距离可以用于衡量数据传输或存储中的错误率,以及检测噪声干扰。 海明距离的计算方法是:对于两个 n 位二进制数,将它们进行逐位比较,如果对应位上的数字不同,则计算距离时增加 1。然后将所有位上的距离加在一起,得到海明距离。
2836 1
|
存储 监控 网络协议
【Linux】文件服务NFS(Network File System)
【Linux】文件服务NFS(Network File System)
305 0
|
9月前
|
人工智能 JSON Serverless
阿里云AI剧本生成与动画创作解决方案深度评测
阿里云AI剧本动画全链路解决方案基于函数计算FC、百炼大模型和ComfyUI技术架构,实现从剧本生成到动画渲染的自动化流程。方案在电商广告、知识科普等快速批产场景表现出色,大幅缩短创作时间(如30秒动画从9.5小时减至16.1分钟)。然而,在强剧情连续性和物理规则方面存在不足,建议结合人工审核优化。测试显示其商用级成熟度,推荐采用“AI初稿-人工润色”模式。
758 138
阿里云AI剧本生成与动画创作解决方案深度评测
|
7月前
|
安全 索引
鸿蒙开发:如何更新对象数组
关于对象数组中的数据更新,目前例举了三种方式,一种是传统的装饰器方式,另外两种是针对数据源进行操作,数据源直接赋值的方式,适合简单、高频的单元素修改,性能最优且类型安全,而splice方法适合复杂操作或需保持引用稳定的场景,但需注意性能损耗,在实际的开发中可以根据需求,选择自己适合的方式。
201 34
鸿蒙开发:如何更新对象数组
|
人工智能 搜索推荐 数据挖掘
让 AI 回答更精准 ◎ 来学学这些Prompt入门小技巧
这篇文章介绍了如何通过有效的提示词来提升向AI提问的质量,使其回答更加精准,并提供了实用的指导原则和案例分析。
让 AI 回答更精准 ◎ 来学学这些Prompt入门小技巧
|
小程序
美团买菜小程序平台开发:搭建便捷的线上买菜渠道
随着时代的发展和人们生活水平的提高,网上购物已经成为更多人的首选。在此背景下,类似美团买菜小程序平台开发应运而生,为消费者提供方便快捷的网上购物体验。下面我们将详细讲解美团买菜小程序平台开发的功能特点和优势。
|
算法 虚拟化 C++
VMware虚拟机无法自适应和拖拽复制粘贴和共享目录问题
VMware虚拟机无法自适应和拖拽复制粘贴和共享目录问题
1403 0
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
267 5
|
机器学习/深度学习 算法 搜索推荐
曼哈顿距离(Manhattan distance)
曼哈顿距离(Manhattan distance),也称为城市街区距离(City block distance)或L1距离(L1 distance),是两个点在标准坐标系上的绝对值距离之和。
1854 4