我有这种方法,我用欧几里德算法找到距离,并将值保存为双精度数组中的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;
}
我将不胜感激任何帮助。提前致谢
答案 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;
}
}