Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度示例
本文實(shí)例講述了Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度功能。分享給大家供大家參考,具體如下:
import java.util.HashMap; public class MyUDF{ /** * UDF Evaluate接口 * * UDF在記錄層面上是一對(duì)一,字段上是一對(duì)一或多對(duì)一。 Evaluate方法在每條記錄上被調(diào)用一次,輸入為一個(gè)或多個(gè)字段,輸出為一個(gè)字段 */ public Double evaluate(String a, String b) { // TODO: 請(qǐng)按需要修改參數(shù)和返回值,并在這里實(shí)現(xiàn)你自己的邏輯 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)); } }
運(yùn)行結(jié)果:
0.9135468796041984
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn)
我們?cè)趯?xiě)spring?boot?web項(xiàng)目時(shí),有時(shí)會(huì)遇到啟動(dòng)后立即關(guān)閉的情況,?本文主要介紹了SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01SpringBoot利用jpa連接MySQL數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了SpringBoot利用jpa連接MySQL數(shù)據(jù)庫(kù)的方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10java實(shí)現(xiàn)同態(tài)加密算法的實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)同態(tài)加密算法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12java線程之使用Runnable接口創(chuàng)建線程的方法
本篇文章介紹了,java中使用Runnable接口創(chuàng)建線程的方法。需要的朋友參考下2013-05-05基于XML配置Spring的自動(dòng)裝配過(guò)程解析
這篇文章主要介紹了基于XML配置Spring的自動(dòng)裝配過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10淺談Java 三種方式實(shí)現(xiàn)接口校驗(yàn)
這篇文章主要介紹了淺談Java 三種方式實(shí)現(xiàn)接口校驗(yàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Java用GDAL讀寫(xiě)shapefile的方法示例
Shapefile文件是描述空間數(shù)據(jù)的幾何和屬性特征的非拓?fù)鋵?shí)體矢量數(shù)據(jù)結(jié)構(gòu)的一種格式,由ESRI公司開(kāi)發(fā)。這篇文章給大家介紹了Java如何用GDAL讀寫(xiě)shapefile的方法示例,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12Java枚舉類(lèi)型在switch語(yǔ)句正確使用方法詳解
這篇文章主要介紹了Java枚舉類(lèi)型在switch語(yǔ)句正確使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07