Java实现的计算稀疏矩阵余弦相似度示例

本文实例讲述了Java实现的计算稀疏矩阵余弦相似度功能。分享给大家供大家参考,具体如下:

import java.util.HashMap;
public class MyUDF{
  /**
   * UDF Evaluate接口
   *
   * UDF在记录层面上是一对一,字段上是一对一或多对一。 Evaluate方法在每条记录上被调用一次,输入为一个或多个字段,输出为一个字段
   */
  public Double evaluate(String a, String b) {
    // TODO: 请按需要修改参数和返回值,并在这里实现你自己的逻辑
    if(a==null || b==null)
      return 0.0;
    String temp1[]=a.split(",");
    String temp2[]=b.split(",");
    if (temp1==null || temp2==null) {
      return 0.0;
    }
    HashMap<String, Double> map1=new HashMap<String, Double>();
    HashMap<String, Double> map2=new HashMap<String, Double>();
    for(String temp:temp1)
    {
      String t[]=temp.split(":");
      map1.put(t[0], Double.parseDouble(t[1]));
    }
    for(String temp:temp2)
    {
      String t[]=temp.split(":");
      map2.put(t[0], Double.parseDouble(t[1]));
    }
    double fenzi=0;
    double fenmu1=0;
    for(String i:map1.keySet())
    {
      double value=map1.get(i);
      if (map2.get(i)!=null) {
        fenzi+=value*map2.get(i);
      }
      fenmu1+=value*value;
    }
    double fenmu2=0;
    for(double i:map2.values())
    {
      fenmu2+=i*i;
    }
    double fenmu=Math.sqrt(fenmu1)*Math.sqrt(fenmu2);
    return fenzi/fenmu;
  }
  public static void main(String[] args) {
    String a="12:500,14:100,20:200";
    String b="12:500,14:100,30:100";
    MyUDF myUDF=new MyUDF();
    System.out.println(myUDF.evaluate(a, b));
  }
}

运行结果:

0.9135468796041984

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java实现任意矩阵Strassen算法

    本例输入为两个任意尺寸的矩阵m * n, n * m,输出为两个矩阵的乘积.计算任意尺寸矩阵相乘时,使用了Strassen算法.程序为自编,经过测试,请放心使用.基本算法是: 1.对于方阵(正方形矩阵),找到最大的l, 使得l = 2 ^ k, k为整数并且l < m.边长为l的方形矩阵则采用Strassen算法,其余部分以及方形矩阵中遗漏的部分用蛮力法. 2.对于非方阵,依照行列相应添加0使其成为方阵. StrassenMethodTest.java package matrixalgorit

  • Java编程实现邻接矩阵表示稠密图代码示例

    我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那么A中的一个元素aij不仅体现出了结点vi和结点vj的关系,而且aij的值正可以表示权值的大小. 邻接矩阵模型类 邻接矩阵模型类的类名为AMWGraph.java,能够通过该类构造一个邻接矩阵表示的图,且提供插入结点,插入边,取得某一结点的第一个邻接结点和下一个邻接结点. import java.u

  • Java编程数组中最大子矩阵简便解法实现代码

    本文研究的主要是Java编程数组中最大子矩阵的相关内容,具体介绍如下. 遇到一个好人,可以改变一生:遇到一本好书,又何尝不是呢? 最近在翻阅 左程云先生的<程序员代码面试指南–IT名企算法与数据结构题目最优解>时就非常的有感悟.建议有这方面爱好的博友,也去观摩观摩. 书中讲解的基于栈的数组的最大矩阵的算法很经典,但是博主能力有限,没能彻底的领悟该算法的精髓,但是根据这个思想,博主想出了一种简易的应对该类问题的算法,现概述如下. 核心思想 先来看一张图吧,我们就可以大致的理解了. 如图,每一个轮

  • Java矩阵连乘问题(动态规划)算法实例分析

    本文实例讲述了Java矩阵连乘问题(动态规划)算法.分享给大家供大家参考,具体如下: 问题描述:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1.确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少.输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数. 问题解析:由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序.这种计算次序可以用加括号的方式来确定.若一个矩阵连乘积的计算次序完全确

  • Java实现的矩阵乘法示例

    本文实例讲述了Java实现的矩阵乘法.分享给大家供大家参考,具体如下: 思路: 矩阵乘法的前提是:前一矩阵的行数 == 后一矩阵的列数(rows == cols) 在满足前提的情况下:前一矩阵的第一行 与 第二个矩阵的第一列 逐个相乘.将乘积求和 作为 结果矩阵的第一个元素 类推刻得到:结果矩阵的 第 [row][col] 个元素 = 前一矩阵的第 row 行 与 后一矩阵的 col列上的元素 逐一相乘 后的乘积之和 代码及解析: 一.算法剖析: 1.设置两个for循环用来控制结果(输出)矩阵的

  • Java实现输出回环数(螺旋矩阵)的方法示例

    本文实例讲述了Java实现输出回环数(螺旋矩阵)的方法.分享给大家供大家参考,具体如下: 以前见过,没做出来:那天论坛再见,灵感来了,太神奇了 复杂度好像为 o(n) 保存下来 package demo; public class snakeMatrixDemo { public static void main(String[] args) { int m = 5;/* 行 */ int n = 5;/* 列 */ int[][] pos = new int[m][n];/* 位置 */ /*

  • Java编程实现打印螺旋矩阵实例代码

    直接上代码吧. 昨晚腾讯在线测试遇到的题. 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环. import java.util.Scanner; public class mysnakematrix { private int n; // private int a[][]; // 声明一个矩阵 private int value = 1; // 矩阵里数字的值 public mysnakematrix(int i) { this.n

  • Java实现矩阵加减乘除及转制等运算功能示例

    本文实例讲述了Java实现矩阵加减乘除及转制等运算功能.分享给大家供大家参考,具体如下: Java初学,编写矩阵预算程序,当做工具,以便以后写算法时使用. public class MatrixOperation { public static int[][] add(int[][] matrix_a, int[][] matrix_b) { int row = matrix_a.length; int col = matrix_a[0].length; int[][] result = new

  • java 二维数组矩阵乘法的实现方法

    复制代码 代码如下: public interface IMatrixMultiple {     public int[][] mmltiple(int[][]a ,int [][]b); } ?public class MatrixMultiple implements IMatrixMultiple { @Override    public int[][] mmltiple(int[][] a, int[][] b) {         int [][] result = new int

  • Java实现的求逆矩阵算法示例

    本文实例讲述了Java实现的求逆矩阵算法.分享给大家供大家参考,具体如下: package demo; public class MatrixInverse { public static double Det(double [][]Matrix,int N)//计算n阶行列式(N=n-1) { int T0; int T1; int T2; double Num; int Cha; double [][] B; if(N>0) { Cha=0; B=new double[N][N]; Num=

  • java 矩阵乘法的mapreduce程序实现

    java 矩阵乘法的mapreduce程序实现 map函数:对于矩阵M中的每个元素m(ij),产生一系列的key-value对<(i,k),(M,j,m(ij))> 其中k=1,2.....知道矩阵N的总列数;对于矩阵N中的每个元素n(jk),产生一系列的key-value对<(i , k) , (N , j ,n(jk)>, 其中i=1,2.......直到i=1,2.......直到矩阵M的总列数. map package com.cb.matrix; import stati

随机推荐