簡體   English   中英

Java Math.abs與Math.pow

[英]Java Math.abs vs Math.pow

所以這是一個奇怪的問題。 我正在研究一個kNN問題,需要找到最近的鄰居。 我正在調查距離,但我再一次不關心實際的距離,只是哪一個距離最近。 但是,由於距離不能為負,我需要平方或取距離的絕對值。

所以這里有兩個選項來完成這個:

//note: it's been abstracted for multiple dimensions (not just x and y)
for(int i = 0; i < (numAttributes - 1); i++)
{
    distance += Math.pow((a.value(i) - b.value(i)), 2);
}

//note: it's been abstracted for multiple dimensions (not just x and y)
for(int i = 0; i < (numAttributes - 1); i++)
{
    distance += Math.abs(a.value(i) - b.value(i));
}

我的問題是哪個更快。 由於這是一個數據挖掘應用程序,我希望它能夠盡快處理信息。 雖然我明白,在內部,兩個人的力量可以通過移位來實現,我不確定在像Java這樣的高級語言中它是如何被轉換為JVM的情況。 有人為什么比另一個好?

首先,考慮矢量A=[0,0,0]B=[1,1,1]C=[0,0,2] 哪一個更接近A B還是C 實際上,關心距離測量在kNN中絕對至關重要。 我們只談論曼哈頓和歐幾里德的距離。 例如,您也可以使用余弦相似度,並且應該仔細選擇距離度量,同時考慮您對數據的了解。

其次,而不是這種低級優化,考慮更聰明的事情。 例如,一旦檢測到太大的距離,就打破你的for(int i = 0; i < (numAttributes - 1); i++)循環。

第三,使用Math.pow(a,2)來計算a*a絕對是非常低效的。

第四, i < (numAttributes - 1) 你不是說i < numAttributes ??

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM