本文實例講述了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