Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
行向量矩阵间python-numpy欧氏距离计算_Python_Vector_Numpy_Scipy_Euclidean Distance - Fatal编程技术网

行向量矩阵间python-numpy欧氏距离计算

行向量矩阵间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) 我们能吃

我是Numpy新手,我想问你们如何计算存储在向量中的点之间的欧几里德距离

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

以下是一个界面:

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))