行向量矩阵之间的python numpy欧几里德距离计算

pac*_*erg 19 python numpy vector scipy euclidean-distance

我是Numpy的新手,我想问你如何计算矢量中存储的点之间的欧氏距离.

让我们假设我们有一个numpy.array,每一行都是一个向量和一个numpy.array.我想知道是否可以计算所有点和这个单点之间的欧氏距离并将它们存储在一个numpy.array中.

这是一个界面:

points #2d list of row-vectors
singlePoint #one row-vector

listOfDistances= procedure( points,singlePoint)
Run Code Online (Sandbox Code Playgroud)

我们可以有这样的东西吗?或者是否可以让一个命令将单个点作为其他点的列表,最后我们得到一个距离矩阵?

谢谢

Joe*_*ton 17

虽然你可以使用矢量化,但是对于numpy数组,@ Karl的方法会相当慢.

更简单的方法就是做np.hypot(*(points - single_point).T).(转置假定点是Nx2阵列,而不是2xN.如果它是2xN,则不需要.T.

但是这有点难以理解,所以你更明确地写出来(使用一些固定的示例数据......):

import numpy as np
single_point = [3, 4]
points = np.arange(20).reshape((10,2))

dist = (points - single_point)**2
dist = np.sum(dist, axis=1)
dist = np.sqrt(dist)
Run Code Online (Sandbox Code Playgroud)

  • 即使这样可以完成工作,您还是最好使用现有函数,例如 np.linalg.norm(x - y, axis=1) 或 distance.euclidean 或 cdist。 (5认同)
  • 在上面示例的上下文中扩展@VadimKirilchuk 的评论:`np.linalg.norm(points - single_point,axis=1)` (3认同)

Chr*_*ian 8

要获取距离,可以在numpy中使用linalg模块的norm方法:

np.linalg.norm(x - y)
Run Code Online (Sandbox Code Playgroud)


小智 5

import numpy as np
def distance(v1, v2):
    return np.sqrt(np.sum((v1 - v2) ** 2))    
Run Code Online (Sandbox Code Playgroud)