python - 查找两个不同列表的元素之间的距离

标签 python scipy euclidean-distance

下面的代码找到列表 a 的每个元素和列表 b 的每个元素之间的欧几里德距离。

from scipy.spatial import distance
a = [[1, 2, 3], [4, 5, 6]]
b = [[10, 20]]

Final_distance = []
for i in [j for sub in a for j in sub]:
    for k in [m for t in b for m in t]:
        dist = distance.euclidean(i, k)
        Final_distance.append(dist)
print(Final_distance)

输出是

[9.0, 19.0, 8.0, 18.0, 7.0, 17.0, 6.0, 16.0, 5.0, 15.0, 4.0, 14.0]

但是对于非常大的列表,它需要很长时间。有没有办法降低上面代码的时间复杂度?

最佳答案

由于您的欧几里德距离是标量,因此它相当于每个点之间的绝对值。因此,您可以使用 np.repeatnp.tile 以适当的顺序重复您的数组,并将您的数组彼此相减:

import numpy as np

a = [[1, 2, 3], [4, 5, 6]]
b = [[10, 20]]

a1 = np.array(a).flatten()
b1 = np.array(b).flatten()

Final_distance = np.abs(np.subtract(np.repeat(a1, len(b1)), np.tile(b1, len(a1))))

哪个返回:

array([ 9, 19,  8, 18,  7, 17,  6, 16,  5, 15,  4, 14])

关于python - 查找两个不同列表的元素之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52171623/

相关文章:

python - SQLAlchemy 枚举/类型匹配?

python - Python 2D 中的傅里叶变换

向量空间模型 : Cosine Similarity vs Euclidean Distance

python:如果它只有常量,那么实例化一个类与引用相比有什么缺点吗?

python - 如何将返回值(从上一个函数)读取到 pandas、python 中?获取错误消息

python - requirements.txt 在 scipy 之前安装 numpy?

python - Scipy Curve_fit : Why is my fitting so poor and how to improve it?

c++ - 来自点列表的最佳路径c++

r - R中两个3D点之间的距离

python - 如何向 sqlalchemy 中的表添加自定义的任意选项?