用JAVA计算n维大ArrayList中元素之间的欧式距离的有效方法是什么?

时间:2019-01-13 08:00:03

标签: java arraylist out-of-memory large-data euclidean-distance

我想计算 JAVA 中二维数组列表中每对元素之间的 Euclidean 距离。这二维数组列表由40个维度的40000条记录组成。我遇到了内存不足的问题:

  

线程“ main”中的异常java.lang.OutOfMemoryError:Java堆空间

我将堆内存大小增加为: Xmx16000M (16Gb RAM)。但是问题也存在。那么,如何摆脱内存不足的问题呢?在下面的内容中,您将看到完全描述我的代码的伪代码。谢谢所有受访者。

ArrayList<ArrayList<Double> dataset = new ArrayList<ArrayList<Double>>();
dataset = readDataset(); // a method returns data to my 2-d arraylist
                         //now I have 40000 records in 40 dim in dataset!
distanceMatrix = new double[dataset.size()][dataset.size()];

for (int i=0 ; i<dataset.size(); i++) {
    for (int j=0 ; j<(dataset.size()-i); j++) {
        if (i == j) {
            distanceMatrix[i][j] = 0.0;
            continue;
        }
        double ans= getDistance(dataset.get(i), dataset.get(j));
        distanceMatrix[i][j] = ans;
        distanceMatrix[j][i] = ans;
    }
}

public double getDistance(ArrayList<Double> a , ArrayList<Double> b) {
    double dist=0;
    for (int i = 0; i < 40; i++) { 
        double c = Math.abs(a.get(i) - b.get(i));
        dist += Math.pow(c, 2);
    }
    dist = Math.sqrt(dist);
    return dist;
}

0 个答案:

没有答案