用于计算向量的任意一对2元素的差异的算法

时间:2015-04-05 19:43:54

标签: python algorithm convolution

我有两个大矢量“vec_x”和“vec_y”代表每个点的x和y轴位置。现在想要生成矩阵(A),其下标表示2个元素之间的距离,例如, A [3] [1000]存储sqrt((vec_x(3)-vec_x(1000))^ 2 +(vec_y(3)-vec_y(1000))^ 2)。

有没有人有快速算法?

因为A很大并且可能无法存储在内存中。另外,如果我定义对角线元素与常量相同,比如999,我需要的是一个向量,其元素代表A中每一行的总和。任何想法?

简单循环似乎超级慢。

1 个答案:

答案 0 :(得分:3)

使用scipy.spatial.distancehttp://docs.scipy.org/doc/scipy/reference/spatial.distance.html),尤其是cdist()

>>> x = [1,2,3,4,5]
>>> y = [4,1,7,8,1]
>>> xy = zip(x, y)
>>> xy
[(1, 4), (2, 1), (3, 7), (4, 8), (5, 1)]
>>> import scipy.spatial.distance as ssd
>>> ssd.cdist(xy, xy)
array([[ 0.        ,  3.16227766,  3.60555128,  5.        ,  5.        ],
       [ 3.16227766,  0.        ,  6.08276253,  7.28010989,  3.        ],
       [ 3.60555128,  6.08276253,  0.        ,  1.41421356,  6.32455532],
       [ 5.        ,  7.28010989,  1.41421356,  0.        ,  7.07106781],
       [ 5.        ,  3.        ,  6.32455532,  7.07106781,  0.        ]])