多个向量之间的距离
Distance between multiple vectors
我有两组三维单位向量,我想衡量它们的相似程度。我现在的方法是手动计算他们差的欧式范数
一个例子(不考虑单位向量)看起来像
import numpy as np
N = 4000
a = np.random.rand(3,N)
b = np.random.rand(3,N)
dist = np.sum((a-b)**2,axis=0)
dist = np.sum(dist)/len(dist)
有没有更好的方法来做到这一点?即我没有想到的 numpy 函数或度量?
您可以在 scipy 包中使用距离。
from scipy.spatial import distance
distance.euclidean(a, b)
要计算 numpy 中的欧氏距离,您可以使用
numpy.linalg.norm(a-b)
还有其他类型的距离,测量其他类型的相似性。 SciPy 在文档中实现和描述了很多:https://docs.scipy.org/doc/scipy/reference/spatial.distance.html
正如问题评论中所讨论的,这应该更适合您正在尝试做的事情:
from scipy import spatial
import numpy as np
N = 10
a = np.random.rand(3, N)
b = np.random.rand(3, N)
mean_a = np.mean(a, axis=1)
mean_b = np.mean(b, axis=1)
similarity = spatial.distance.cosine(mean_a, mean_b)
越接近 1 的值越相似,越接近 0 的值越不相似。
我有两组三维单位向量,我想衡量它们的相似程度。我现在的方法是手动计算他们差的欧式范数
一个例子(不考虑单位向量)看起来像
import numpy as np
N = 4000
a = np.random.rand(3,N)
b = np.random.rand(3,N)
dist = np.sum((a-b)**2,axis=0)
dist = np.sum(dist)/len(dist)
有没有更好的方法来做到这一点?即我没有想到的 numpy 函数或度量?
您可以在 scipy 包中使用距离。
from scipy.spatial import distance
distance.euclidean(a, b)
要计算 numpy 中的欧氏距离,您可以使用
numpy.linalg.norm(a-b)
还有其他类型的距离,测量其他类型的相似性。 SciPy 在文档中实现和描述了很多:https://docs.scipy.org/doc/scipy/reference/spatial.distance.html
正如问题评论中所讨论的,这应该更适合您正在尝试做的事情:
from scipy import spatial
import numpy as np
N = 10
a = np.random.rand(3, N)
b = np.random.rand(3, N)
mean_a = np.mean(a, axis=1)
mean_b = np.mean(b, axis=1)
similarity = spatial.distance.cosine(mean_a, mean_b)
越接近 1 的值越相似,越接近 0 的值越不相似。