本文实例讲述了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