欧氏距离的矢量化实现
Vectorized implementation for Euclidean distance
我正在尝试计算欧氏距离的矢量化实现(使用内积在 X 和 Y 中的每个元素之间)。数据如下:
X = np.random.uniform(low=0, high=1, size=(10000, 5))
Y = np.random.uniform(low=0, high=1, size=(10000, 5))
我所做的是:
euclidean_distances_vectorized = np.array(np.sqrt(np.sum(X**2, axis=1) - 2 * np.dot(X, Y.T) + np.sum(Y**2, axis=1)))
尽管这给出了 'some output' 答案是错误的,因为每行仍然包含 5 个元素。
有谁知道我做错了什么吗?
如果我理解正确,应该这样做
np.linalg.norm(X - Y, axis=1)
或用einsum
(沿第一个轴的每个差异对的点积的平方根)
np.sqrt(np.einsum('ij,ij->i...', X - Y, X - Y))
如果你想要所有成对的距离
from scipy.spatial.distance import cdist
cdist(X, Y)
我正在尝试计算欧氏距离的矢量化实现(使用内积在 X 和 Y 中的每个元素之间)。数据如下:
X = np.random.uniform(low=0, high=1, size=(10000, 5))
Y = np.random.uniform(low=0, high=1, size=(10000, 5))
我所做的是:
euclidean_distances_vectorized = np.array(np.sqrt(np.sum(X**2, axis=1) - 2 * np.dot(X, Y.T) + np.sum(Y**2, axis=1)))
尽管这给出了 'some output' 答案是错误的,因为每行仍然包含 5 个元素。
有谁知道我做错了什么吗?
如果我理解正确,应该这样做
np.linalg.norm(X - Y, axis=1)
或用einsum
(沿第一个轴的每个差异对的点积的平方根)
np.sqrt(np.einsum('ij,ij->i...', X - Y, X - Y))
如果你想要所有成对的距离
from scipy.spatial.distance import cdist
cdist(X, Y)