找到双精度数组中的最小值

时间:2016-03-04 11:58:46

标签: java

我有这种方法,我用欧几里德算法找到距离,并将值保存为双精度数组中的double。现在我需要找到每个测试的最小值并返回索引的值。

    public static double distance() {

    for (int i = 0; i < GetFile.testMatrix.length;) {

        double[] distances = new double[4000];
        double minDistance = 999999;
        for (int j = 0; j < GetFile.trainingMatrix.length; j++) {
            distances[j] = EuclideanDistance.findED(GetFile.trainingMatrix[j], GetFile.testMatrix[i]);
        }

        return minDistance;
    }
    return 0;

}

我将不胜感激任何帮助。提前致谢

4 个答案:

答案 0 :(得分:2)

看起来好像你需要将结果存储在一个数组中,因为它被丢弃了。每次从findED获得结果时,都应该考虑在minDistance中跟踪结果。

如果您使用的是java的流,如果您使用的是可以访问它们的java版本,那么这看起来也会更容易理解。

答案 1 :(得分:1)

有几种方法可以做到这一点。 一种方法是迭代值并始终采用最小值:

double minDistance = distances[0];
for(int j =1 ;j < GetFile.trainingMatrix.length; j++){
    if(distances[j]<minDistance)
        minDistance=distances[j];
}

或者

double minDistance = distances[0];
for(int j =1 ;j < GetFile.trainingMatrix.length; j++){
    minDistance = Math.min(minDistance, distances[j];
}

或使用流(距离为List):

double minDistance = distances.stream().mapToDouble(e -> e).min().getAsDouble();

甚至更好(完全实现你的for循环):

double minDistance = Stream.iterate(0,j -> j+1)
                           .limit(GetFile.trainingMatrix.length)
                           .mapToDouble(j->EuclideanDistance.findED(GetFile.trainingMatrix[j], GetFile.testMatrix[i]))
                           .min().orElse(-1);

答案 2 :(得分:0)

代码的另一种方式:

public static double distance() {

    for (int i = 0; i < GetFile.testMatrix.length;) {

        double[] distances = new double[4000];
        for (int j = 0; j < GetFile.trainingMatrix.length; j++) {
            distances[j] = EuclideanDistance.findED(GetFile.trainingMatrix[j], GetFile.testMatrix[i]);
        }

        return getMinDistance(distances);
    }
    return 0;

}


static double getMinDistance(double[] distances) {
    double minDistance = Double.MAX_VALUE;
    for (double distance : distances) {
        minDistance = Math.min(distance, minDistance);
    }
    return minDistance;
}

答案 3 :(得分:0)

将minDistance分配给距离[0],除非您非常确定距离数组将包含的最大值。

 class ComponentVm{
     public Name:string;

     constructor(anonymousObject:any){
          let order = anonymousObject.value;
          this.Name = order.Name;
     }
}