![](/img/trans.png)
[英]Calculate Euclidean Distance between all the elements in a list of lists python
[英]Fastest way to calculate Euclidean and Minkowski distance between all the vectors in a list of lists python
我一直在尝试计算列表列表中所有向量之间的欧几里得和闵可夫斯基距离。 我没有太多高级的数学知识。
在这个过程中,我依赖了这两个问题:
起初我的代码看起来像这样:
import numpy as np
def euclidean_distance_np(vec_list, single_vec):
dist = (np.array(vec_list) - single_vec) ** 2
dist = np.sum(dist, axis=1)
dist = np.sqrt(dist)
return dist
def minkowski_distance_np(vec_list, single_vec, p_val):
dist = (np.abs(np.array(vec_list, dtype=np.int64) - single_vec) ** p_val).sum(axis=1) ** (1 / p_val)
return dist
当我有少量向量时,这很有效。 我会计算单个向量与列表中所有向量的距离,并为列表中的每个向量一个一个地重复该过程,但是一旦列表长度变为 5 或 6 位,这些函数就会变得非常慢。
我设法改进了欧几里得距离计算,如下所示:
x = np.array([v[0] for v in vec_list])
y = np.array([v[1] for v in vec_list])
z = np.array([v[2] for v in vec_list])
w = np.array([v[3] for v in vec_list])
t = np.array([v[4] for v in vec_list])
res = np.sqrt(np.square(x - x.reshape(-1,1)) + np.square(y - y.reshape(-1,1)) + np.square(z - z.reshape(-1,1)) + np.square(w - w.reshape(-1,1)) + np.square(t - t.reshape(-1,1)))
但无法弄清楚如何实现上述计算方法来正确计算闵可夫斯基距离。 所以,准确地说,我的问题是如何以与我上面提到的代码类似的方式计算 Minkowski 距离。
我也将不胜感激任何改进的想法或更好的方法来执行计算
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.