Python 计算向量的任意两个元素对之差的算法

Python 计算向量的任意两个元素对之差的算法,python,algorithm,convolution,Python,Algorithm,Convolution,我有两个大向量“vec_x”和“vec_y”代表每个点的x轴和y轴位置。现在要生成一个矩阵(a),其下标表示两个元素之间的距离,例如a[3][1000]存储sqrt((vec_x(3)-vec_x(1000))^2+(vec_y(3)-vec_y(1000))^2) 有人有快速算法吗 因为A很大,可能无法存储在内存中。另外,如果我定义对角线元素都是相同的常数,比如999,我需要的是一个向量,它的元素代表a中每一行的和。你知道吗 简单循环似乎非常慢。使用scipy.space.distance()

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

有人有快速算法吗

因为A很大,可能无法存储在内存中。另外,如果我定义对角线元素都是相同的常数,比如999,我需要的是一个向量,它的元素代表a中每一行的和。你知道吗


简单循环似乎非常慢。

使用
scipy.space.distance
(),尤其是
cdist()


如果您需要编写这种算法(简单的操作在循环中执行多次),更常考虑查看Cython。或者您可以尝试Numpy,它允许您执行向量操作,从而加快代码的速度。但是这次,正如@FuzzyDuck所指出的,使用
scipy.space.distance
可能是最好的选择。好吧,我可能错了。第二步呢,因为大矩阵内存不足,比如说1M*1M。
>>> 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.        ]])