For loop 欧氏距离C#

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

我正在做一个C#项目,寻找两点之间的欧几里德距离

现在我有两个for循环,如下所示:

 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上做这些计算。 如果你愿意,你可以尝试一些新的和实验性的东西,比如