【发布时间】:2016-04-09 21:56:24
【问题描述】:
我完成了一本学术编程书籍中的一些练习。任务是实现 2 个向量并计算它们之间的欧几里得距离。不,这不是家庭作业,而是自学。
我正在就我的远程实现的正确性寻求一些反馈。
public class EuclideanDist
{
public static void main(String[] args)
{
EuclideanDist euc = new EuclideanDist();
Random rnd = new Random();
int N = Integer.parseInt(args[0]);
double[] a = new double[N];
double[] b = new double[N];
double[] x = new double[N];
euc.print(euc.init(a, rnd));
euc.print(euc.init(b, rnd));
print(euc.distance(a, b, x));
}
private double[] init(double[] src, Random rnd)
{
for(int i = 0; i < src.length; i++)
{
src[i] = rnd.nextDouble();
}
return src;
}
private double[] distance(double[] a, double[] b, double[] x)
{
double diff;
int N = a.length;
for(int i = 0; i < N; i++)
{
diff = a[i] - b[i];
x[i] = Math.sqrt(diff * diff);
}
return x;
}
private static void print(double[] x)
{
int N = x.length;
for(int j = 0; j < N; j++)
System.out.print(" " + x[j] + " ");
System.out.println();
}
}
【问题讨论】:
-
你有什么问题?
-
这是Java;你为什么把它标记为 C++?
-
距离应该是一个标量,而不是一个向量;沿每个轴的距离平方和的平方根。
sqrt(diff * diff)显然只是diff。 -
我认为 OP 使用
sqrt(diff*diff)而不是abs来确保diff是 +ve。不评论最优性或其他,但sqrt(diff*diff)并不总是等于diff -
OP - 我认为你有一个概念问题,而不是编程问题。尝试阅读 some resources 了解欧几里得距离的含义 - 您的实施和对答案的评论暗示您误解了。
标签: java arrays vector euclidean-distance