用Java语言实现余弦定理和修正余弦
在NLP自然语言处理中,常常会有推荐相关的算法,这就免不了相关的距离计算公式计算两个向量之间的举例。这里用Java语言实现余弦定理和修正余弦,直接上代码~
【余弦定理】
package com.xzw.cos;import java.util.Map;
import java.util.Map.Entry;/*** 相似度计算,余弦定理Java实现* @author xzw**/
public class Cos {public static double getTwoVectorsSimilar(Map<String, Double> src, Map<String, Double> dest){double score = 0;if (src.size() == 0 || dest.size() == 0) {return 0;}double v1 = 0, v2 = 0, fenzi = 0, fmOne = 0, fmTwo = 0;for (Entry<String, Double> item : src.entrySet()) {v1 = item.getValue();fmOne += v1 * v1;if (dest.containsKey(item.getKey())) {v2 = dest.remove(item.getKey());fmTwo += v2 * v2;fenzi += v1 * v2;}}for (double dv : dest.values()) {fmTwo += dv * dv;}dest.clear();dest = null;if (fmOne == 0 || fmTwo == 0) {return 0;}else {score = fenzi / Math.sqrt(fmOne * fmTwo);}return score;}}
【修正余弦】
package com.xzw.cos;import java.util.Map;
import java.util.Map.Entry;/*** 相似度计算,修正余弦Java实现* @author xzw**/
public class NodCos {public static double getSim(Map<String,Double> src,Map<String,Double> dest){double score = 0;double avgs = 0;double avgd = 0;if(src.size() == 0 || dest.size() == 0){return 0;}for( double v :src.values()){avgs += v;}avgs = avgs / src.size();for( double v :dest.values()){avgd += v;}avgd = avgd / dest.size();double v1 = 0, v2 = 0, fz = 0, fm1 = 0, fm2 = 0;for (Entry<String, Double> items : src.entrySet()) {v1 = items.getValue();fm1 += (v1 - avgs) * (v1-avgs);if(dest.containsKey(items.getKey())){v2 = dest.remove(items.getKey());fm2 += (v2 - avgd) * (v2 - avgd);fz += (v1 - avgs) * (v2 - avgd);}}for(double dv : dest.values()){fm2 += (dv - avgd) * (dv - avgd);}dest.clear();dest = null;if(fm1 == 0 || fm2 == 0){return 0;} else{score = fz / Math.sqrt((fm1 * fm2));}return score;}}
用Java语言实现余弦定理和修正余弦相关推荐
- 三角形分类(洛谷P5717题题解,Java语言描述)
题目要求 P5717题目链接 分析 要明确各个条件之间的关系! 首先是要看是不是三角形,如果不是就不用也不能进行下面的判断,这是必须注意的. 判据是:三角形两边之和大于第三边. 接下来要通过三角形的三 ...
- Java语言程序设计基础篇-第10版-第一部分-程序设计基础)
Java程序语言设计(基础篇)-第10版 第一部分 程序设计基础 第1章 计算机.程序和Java概述 1.1 引言 程序设计就是创建(或者开发)软件,软件也称为程序. 简言之,软件包含了指令,告诉计算 ...
- java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...
[填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...
- java语言提供结构_java学习之语句结构
在java语言当中存在4中语句结构,分别是: 1.顺序结构 2.判断结构 3.选择结构 4.循环结构 一.顺序结构: 所谓的顺序结构,也就是当不指定其他三种语句结构的情况下,语句是从上往下依次执行的, ...
- [转载] java语言程序设计-基础篇
参考链接: Java中的决策制定(if,if-else,switch,break,continue,jump) 第1章,计算机.程序和Java概述 包括[每个java初学者都应该搞懂的问题] http ...
- 【OJ】洛谷红题题解锦集(Java语言描述)
前言 能看这篇文章,想来你可能是小白(或者切题的大佬),那这里会把洛谷的红题(当前只有P字段的本谷题目)进行一下整理,希望会合你口味吧-- 本文只附个人题解链接,不附题目链接(题解中自带),如想刷题请 ...
- java语言精通能干什么_Java学到什么程度才能叫精通?
1. 掌握Java语言语法,能够区别Java和其他语言的语法,并能快速且准确地定位.修正程序中出现的Errors和Warnings语法错误: 2. 熟悉某一版本的JDK(如1.8版本)自带的常用命令及 ...
- 程序员的开发工具:Java语言开发人员常用软件
我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华. 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦. 文章目录 一.前言 二.相关软件介绍: 1. IDEA(IntelliJ ID ...
- java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...
[填空题]One day, at the registrar's office of a college, I noticed how parents are behaving with their ...
最新文章
- 一位群友作为后端开发在滴滴和头条分别干了 2 年的经验总结
- 7打开pycharm_Python+pycharm安装、关联教程
- linux:配置jdk环境变量
- java调节音量代码_用Java调用VC音量控制程序_java
- (c语言)和与积的运算第一篇
- seajs打包部署工具spm的使用总结
- react学习(53)--传参payload
- 拒绝双写:巧用Lindorm数据订阅
- 深度学习 —— 深度前馈网络
- 利用jsp和servlet,MySQL实现简易报表
- 485. 最大连续 1 的个数
- VC6.0工程设置说明
- 计算机蓝屏代码0x0000007b,解决电脑蓝屏出现代码0x0000007b怎么解决
- The command ‘docker‘ could not be found in this WSL 2 distro.
- [Frank kelly] 经济学理论对TCP的收敛性和公平性做出分析,从理论上论证了TCP在互联网环境下的稳定性和有效性
- mybatis 的大于号 小于号 大于等于 小于等于
- 计算机专业保研面试备考:高等数学
- 如何用acme.sh申请证书
- 用Python写三级菜单的三个版本
- 国科大-高性能计算考试