csv文件的欧几里德距离

时间:2015-07-28 12:37:09

标签: java arrays

我有一个CSV文件,第一列是ID,另一个是测量,如何计算数据的欧氏距离。我使用Readcsv读取文件,然后我试图计算距离,但我有错误。我只需要读取列作为双数据计算距离并将ID与X1,X2的值分开。用其ID打印每个距离。

     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);

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

你需要安排你的线路阅读器来存储前一行数据的x和y(比如x1,y1),以及当前行的x和y(比如x2,y2)

然后,毕达哥拉斯的应用&#39;定理,给出

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

Sum将是按照它们在您的文件中出现的顺序连接点的锯齿状线的长度。

相关问题