行向量矩阵间python-numpy欧氏距离计算
我是Numpy新手,我想问你们如何计算存储在向量中的点之间的欧几里德距离 假设我们有一个numpy.array,每行是一个向量和一个numpy.array。我想知道是否有可能计算所有点和这个点之间的欧几里德距离,并将它们存储在一个numpy.array中 以下是一个界面:行向量矩阵间python-numpy欧氏距离计算,python,vector,numpy,scipy,euclidean-distance,Python,Vector,Numpy,Scipy,Euclidean Distance,我是Numpy新手,我想问你们如何计算存储在向量中的点之间的欧几里德距离 假设我们有一个numpy.array,每行是一个向量和一个numpy.array。我想知道是否有可能计算所有点和这个点之间的欧几里德距离,并将它们存储在一个numpy.array中 以下是一个界面: points #2d list of row-vectors singlePoint #one row-vector listOfDistances= procedure( points,singlePoint) 我们能吃
points #2d list of row-vectors
singlePoint #one row-vector
listOfDistances= procedure( points,singlePoint)
我们能吃点像这样的吗?
或者有没有可能用一个命令将单个点作为其他点的列表,最后我们得到一个距离矩阵
谢谢要将函数应用于numpy数组的每个元素,请尝试 要进行实际计算,我们需要两个向量中的坐标对之间差平方和的平方根 我们可以使用
zip
对坐标进行配对,使用sum
对结果进行综合。这看起来像:
sum((x - y) ** 2 for (x, y) in zip(singlePoint, pointFromArray)) ** 0.5
虽然您可以使用矢量化,@Karl的方法在numpy数组中会相当缓慢 更简单的方法是只做
np.hypot(*(点-单点).T)
。(转置假定点是Nx2数组,而不是2xN。如果是2xN,则不需要.t
但是,这有点不可读,所以您可以更明确地这样写出来(使用一些固定的示例数据…):
要获得距离,可以使用numpy中linalg模块的norm方法:
np.linalg.norm(x - y)
虽然您想计算一个点和一组点之间的距离,但我认为scipy.spatial.distance.cdist仍然有效。您有两个集合,其中一个只有1个元素。@JimRaynor+1正是我所需要的:)这与上面的相同,但在一行中这应该是正确的答案,您还可以使用axis参数(取决于你想做什么)X是你的N*2向量y是你的点即使这样做了,你最好使用现有的函数,如np.linalg.norm(X-y,axis=1)或distance.euclidean或cdist。要在上面示例的上下文中扩展@VadimKirilchuk的注释:
np.linalg.norm(points-single_point,axis=1)
虽然此代码片段可能会解决问题,但确实有助于提高您的文章质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
import numpy as np
def distance(v1, v2):
return np.sqrt(np.sum((v1 - v2) ** 2))
np.linalg.norm(x - y)
import numpy as np
single_point = [3, 4]
points = np.arange(20).reshape((10,2))
distance = euclid_dist(single_point,points)
def euclid_dist(t1, t2):
return np.sqrt(((t1-t2)**2).sum(axis = 1))