欧几里德距离C#

时间:2014-01-15 23:47:41

标签: for-loop euclidean-distance

我正在研究一个C#项目,找到2点之间的欧氏距离。

现在我有2个像这样的循环:

 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);

           }
}

preg和pois是n个元素的数组矩阵(preg是250个元素,pois是900,000个元素 有没有办法让这更快?像C#中的函数或只能更快地计算距离的库?

我花了差不多2分钟来完成整件事。第二个循环内的计算是一直需要的。

1 个答案:

答案 0 :(得分:1)

对于初学者,请不要使用Math.Pow。

查找x = pois[j, 0] - preg[i, 0];等。

然后distancia_cuadratica = x * x + y * y + z * z;

您似乎也没有找到两点之间的距离 - 您似乎想要找到从preg到pois值的CLOSEST点。它是否正确?它可能会对我们建议您的总算法产生影响。

除此之外,如果可以的话,尽量避免在紧密循环中声明变量。首选++jj++

您真的需要double准确度吗?如果没有,您可以切换到float并节省一些速度。

.Net语言可能不适合这样的计算。 C ++可能是更好的选择。例如,如果您使用C ++,则可以使用矢量化内在函数来更快地执行此类操作。我曾经使用过Intel Performance Primitives。现在你可以使用像CUDA这样的东西在GPU上进行这些计算。

如果您愿意,可以尝试新的和实验性的内容,例如CUDA Sharp