本文实例讲述了java实现的计算稀疏矩阵余弦相似度功能。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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程序设计有所帮助。
原文链接:https://blog.csdn.net/bryan__/article/details/50959402