繁体   English   中英

找到两个不同列表的元素之间的距离

[英]Finding distance between elements of two different list

下面的代码找到列表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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM