2015-07-28 95 views
0

我有一個CSV文件,第一列是ID,另一個是測量值,我如何計算數據的歐氏距離。我使用Readcsv讀取文件,然後試圖計算距離,但我有錯誤。我只需要讀取列作爲雙數據計算距離,並將ID與X1,X2的值分開。用它的ID打印每個距離。csv文件的歐幾里德距離

 double[][] Data = ReadCSV.read("C:\\Users\\navien\\Desktop\\dataset3.csv", 263, false); 

    double Sum = 0.0; 
    double distances; 

    for(int i=0;i<Data.length;i++) { 
     for (int j=i+1; j<Data[0].length;j++){ 
     Sum = Sum + Math.pow((Data[i][j]-Data[i][j]),2.0); // the file compost of three column 
    } 
    } 

    distances = Math.sqrt(Sum); 
+0

Data [i] [j] -Data [i] [j]的結果是什麼? – user2717954

+2

你的錯誤是什麼?還要添加文件的樣本。 –

+0

我沒有任何結果,它只是錯誤,我如何分開ID列和計算歐幾里得距離? –

回答

0

這裏

Sum = Sum + Math.pow((Data[i][j]-Data[i][j]),2.0) 

你減去相等數目(Data[i][j]-Data[i][j])所以結果將是始終爲0。

此方法計算歐幾里德距離,其中在文件中的每一列代表點的座標。

public static void euclidianDistanceFromFile(String path) throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader(path)); 
    String line; 
    while ((line = br.readLine()) != null) { 
     if (line.contains("ID")) continue; 
     String[] arr = line.split(","); 
     String name = arr[0]; 
     double p = Double.parseDouble(arr[1]); 
     double q = Double.parseDouble(arr[2]); 
     double res = Math.sqrt((p - q) * (p - q)); 
     System.out.println(name + ": " + res); 
    } 
} 
+0

我怎麼能表達第二列和第三列在csv文件中,並計算它們之間的距離? –

0

您需要安排您的生產線的讀者來存儲數據的前一行(說X1,Y1)的X和Y,以及當前行的X和Y(說X2,Y2)

然後,畢達哥拉斯定理的應用,給出了

Sum = Sum + Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) 

Sum那麼將在它們出現在文件中的順序連接點的鋸齒線的長度。

+0

Bathsheb,請問我們可以直接在雙數據類型的數據上計算距離,這是iam在我的代碼中嘗試的內容,而不是以字符串文件的形式讀取它? –

+0

你已經接受了錯誤的答案,這有點挫傷了我對項目的熱情:-) – Bathsheba

+0

請問我只是想學習和找到解決方案。 –