For loop 欧氏距离C#
我正在做一个C#项目,寻找两点之间的欧几里德距离 现在我有两个for循环,如下所示:For loop 欧氏距离C#,for-loop,euclidean-distance,For Loop,Euclidean Distance,我正在做一个C#项目,寻找两点之间的欧几里德距离 现在我有两个for循环,如下所示: for (int i = 0; i < pregcount; i ++) { double dist_minima = double.MaxValue; for (int j = 0; j < poiscount; j ++) { double distancia_cuadr
for (int i = 0; i < pregcount; i ++)
{
double dist_minima = double.MaxValue;
for (int j = 0; j < poiscount; j ++)
{
double distancia_cuadratica = Math.Pow(pois[j, 0] - preg[i, 0], 2) + Math.Pow(pois[j, 1] - preg[i, 1], 2) + Math.Pow(pois[j, 2] - preg[i, 2], 2);
}
}
for(int i=0;i
preg和POI是n个元素的数组矩阵(preg是250个元素,POI是900000个元素)
有没有一种方法可以加快计算速度?比如C#中的一个函数或者一个可以更快地计算距离的库
我花了将近2分钟来完成整个过程。第二个循环中的计算花费了所有的时间。对于初学者,不要使用Math.Pow 查找
x=pois[j,0]-preg[i,0];
etc
然后距离=x*x+y*y+z*z;
您似乎不仅仅是在查找两点之间的距离-您似乎希望找到从preg到您的POI值最近的点。这是否正确?这可能会影响我们向您建议的总体算法
除此之外,如果可以的话,尽量避免在紧循环中声明变量。与j++
相比,更喜欢j++
你真的需要双精度吗?如果不需要,你可以切换到浮动并节省一些速度
net语言是这样的计算方式,不太理想。C++可能是更好的选择。如果你使用C++,比如矢量化的本质,你可以用更快的速度来做这样的操作。我以前使用英特尔的性能原语。现在你可以使用CUDA之类的东西在GPU上做这些计算。
如果你愿意,你可以尝试一些新的和实验性的东西,比如