この記事では、スパースマトリックスの計算のコサイン類似性関数のJava実装について説明します。次のように、参照のために共有してください。
import java.util.hashmap; public class myudf { /*** udf evaluate interface** udfはレコードレベルで1対1、フィールドで1対1または多数です。評価方法は、各レコードで1回、1つ以上のフィールドとして入力し、1つのフィールドとして出力されます*/パブリックダブル評価(String A、String B){// TODO:必要に応じて値を変更し、値を返し、(a == null || b == null)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); Fenzi/Fenmuを返します。 } public static void main(string [] args){string a = "12:500,14:100,20:200";文字列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 Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。