技术标签: 向量相似度java
1 /*2 特征向量相似度和距离的计算3 4 相似度:5 ·夹角余弦6 ·相关系数7 ·Dice8 ·Jaccard9 10 距离11 ·明氏距离12 ·欧氏距离13 ·马氏距离14 ·Jffreys & Matusita 距离15 ·Mahalanobis 距离,未实现,协方差矩阵16 ·Camberra 距离(Lance 距离,Williams 距离)17 */18 19 #include20 #include21 #include22 #include23 usingnamespacestd;24 25 doubledotProduct(constvector&v1,constvector&v2)26 {27 assert(v1.size()==v2.size());28 doubleret=0.0;29 for(vector::size_type i=0; i!=v1.size();++i)30 {31 ret+=v1[i]*v2[i];32 }33 returnret;34 }35 36 doublemodule(constvector&v)37 {38 doubleret=0.0;39 for(vector::size_type i=0; i!=v.size();++i)40 {41 ret+=v[i]*v[i];42 }43 returnsqrt(ret);44 }45 46 //夹角余弦47 doublecosine(constvector&v1,constvector&v2)48 {49 assert(v1.size()==v2.size());50 returndotProduct(v1, v2)/(module(v1)*module(v2));51 }52 53 doublemean(constvector&v)54 {55 assert(v.size()!=0);56 doubleret=0.0;57 for(vector::size_type i=0; i!=v.size();++i)58 {59 ret+=v[i];60 }61 returnret/v.size();62 }63 64 doublecov(constvector&v1,constvector&v2)65 {66 assert(v1.size()==v2.size()&&v1.size()>1);67 doubleret=0.0;68 doublev1a=mean(v1), v2a=mean(v2);69 70 for(vector::size_type i=0; i!=v1.size();++i)71 {72 ret+=(v1[i]-v1a)*(v2[i]-v2a);73 }74 75 returnret/(v1.size()-1);76 }77 78 //相关系数79 doublecoefficient(constvector&v1,constvector&v2)80 {81 assert(v1.size()==v2.size());82 returncov(v1, v2)/sqrt(cov(v1, v1)*cov(v2, v2));83 }84 85 //Dice 系数86 doubledice(constvector&v1,constvector&v2)87 {88 assert(v1.size()==v2.size());89 return2.0*dotProduct(v1, v2)/(dotProduct(v1, v1)+dotProduct(v2, v2));90 }91 92 //Jaccard 系数93 doublejaccard(constvector&v1,constvector&v2)94 {95 assert(v1.size()==v2.size());96 returndotProduct(v1, v2)/(dotProduct(v1, v2)+dotProduct(v2, v2)-dotProduct(v1, v2));97 }98 99 //Minkowsky 距离100 doubleminkowsky(constvector&v1,constvector&v2,doublem)101 {102 assert(v1.size()==v2.size());103 doubleret=0.0;104 for(vector::size_type i=0; i!=v1.size();++i)105 {106 ret+=pow(abs(v1[i]-v2[i]), m);107 }108 returnpow(ret,1.0/m);109 }110 111 //Euclidean 距离112 doubleeuclidean(constvector&v1,constvector&v2)113 {114 assert(v1.size()==v2.size());115 returnminkowsky(v1, v2,2.0);116 }117 118 //Manhattan 距离119 doublemanhattan(constvector&v1,constvector&v2)120 {121 assert(v1.size()==v2.size());122 returnminkowsky(v1, v2,1.0);123 }124 125 //Jffreys & Matusita 距离126 doublejffreysMatusita(constvector&v1,constvector&v2)127 {128 assert(v1.size()==v2.size());129 doubleret=0.0;130 for(vector::size_type i=0; i!=v1.size();++i)131 {132 ret+=(sqrt(v1[i])-sqrt(v2[i]))*(sqrt(v1[i])-sqrt(v2[i]));133 }134 returnsqrt(ret);135 }136 137 //Mahalanobis 距离138 doublemahalanobis(constvector&v1,constvector&v2)139 {140 assert(v1.size()==v2.size());141 return0.0;142 }143 144 //Camberra 距离(Lance 距离,Williams 距离)145 doublecamberra(constvector&v1,constvector&v2)146 {147 assert(v1.size()==v2.size());148 doubleret=0.0;149 for(vector::size_type i=0; i!=v1.size();++i)150 {151 ret+=abs(v1[i]-v2[i])/abs(v1[i]+v2[i]);152 }153 returnret;154 }155 156 intmain()157 {158 doublea[]={1,2,3,4,5};159 doubleb[]={5,4,3,2,1};160 vectorv1(a, a+sizeof(a)/sizeof(*a)), v2(b, b+sizeof(b)/sizeof(*b));161 162 cout<
Windows 技术篇-windows家庭版win+R运行搜不到gpedit.msc组策略编辑器解决方法,windows安装组策略编辑器方法。家庭版没有组策略编辑器,需要通过下面的脚本来进行安装即可。保存成一个 bat 文件,执行下即可。注: 编码要为 ANSI。如果还是搜不到,可能是没配环境变量,运行搜索的路径是 windows 下的 System32 和 SysWOW64 这两个文件夹,看看里面能不能搜到。
概述刚巧一个朋友问到我host是系统文件,那么我们修改系统文件会不会对系统产生影响呢?刚好给我找到一个写博文的动力。今天,我们带着以下这些疑问, hosts是什么?有什么作用?修改后对不会对系统产生影响?走入这篇文章。看玩这篇文章,疑虑重重费思量, 迎刃而解把心放。一、hosts是什么?百度百科:Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文
转自陈皓 (CSDN),加上自己的学习体会!概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自...
一、概述Spring Data是Spring下的一个子项目,用于简化数据库访问,并支持云服务的开源框架。Spring Data支持NoSQL和 关系数据存储,其主要目标是使得数据库的访问变得方便快捷。并支持map-reduce框架和云计算数据服务。对于拥有海量数据的项目,可以用Spring Data来简化项目的开发。然而针对不同的数据储存访问使用相...
前言、一、/art/dex2oat/dex2oat.cc#Dex2oat 函数源码、二、/art/dex2oat/dex2oat.cc#Setup 函数源码 ( 脱壳点 )
使用cv2.imread(),cv2.imshow(),cv2.imwrite()读取、显示和保存图像
文章目录注释public class 和class的区别关键字标识符注释作用:解释说明,在程序中不运行。目的:增加程序可读性注释分类单行注释://多行注释:/* 文字*/文档注释:/** 文字*/public class 和class的区别一个类前的public是可有可无的。如果一个类用public修饰则文件名必须与类名一致。如果一个类前面没有使用public修饰,则文...
以下实例展示了 count() 方法的使用方法:以上实例输出结果如下:1) 使用字典dict()循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1.2) 使用defaultdict()defaultdict(parameter)可以接受一个类型参数,如str,int等,但传递进来的类型参数,不是用来约束值的类型,更不是...
SQL 语法风格是指我们查询数据的时候使用 SQL 语句来查询.这种风格的查询必须要有临时视图或者全局视图来辅助scala> val df = spark.read.json("/opt/module/spark-local/examples/src/main/resources/people.json")df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]scala> df2.createOrReplace
我们之前介绍过synchronized关键字实现程序的原子性操作,它的内部也是一种加锁和解锁机制,是一种声明式的编程方式,我们只需要对方法或者代码块进行声明,Java内部帮我们在调用方法之前和结束时加锁和解锁。而我们本篇将要介绍的显式锁是一种手动式的实现方式,程序员控制锁的具体实现,虽然现在越来越趋向于使用synchronized直接实现原子操作,但是了解了Lock接口的具体实现机制将有...
说明: 最近刚刚开始接触接口的编写,用的是有关grpc远程调用。我还没太搞明白接口是怎么回事,但我的初步目标可以简单理解为生成两个python文件。比如你的proto文件名是ABC,那么我的目标是生成:ABC_pb2.py 和 ABC_pb2_grpc.py。 本文主要是针对上述目标的proto文件编译的。 首先介绍一下我查到的编译方法,第一种是使用protoc,第二...
构造url网页链接常用字符串处理str.split('.')#不添加默认按空格tab分割'www.baidu.com'-->'www','baidu','com'str.replace('要修改的','要用来替代的')str.strip()#去掉前后端(两侧)空格'{提取的格式化内容}str'.format('选项')#常用在连接最后的搜索内容'https://www.pexels....