计算向量的任何一对 2 元素之差的算法
algorithms to calculate difference of any pair of 2 elements for a vector
我有2个大向量"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中每条线的总和。有想法吗?
简单的循环似乎超级慢。
使用 scipy.spatial.distance
(http://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. ]])
我有2个大向量"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中每条线的总和。有想法吗?
简单的循环似乎超级慢。
使用 scipy.spatial.distance
(http://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. ]])