python numpy行向量矩阵之间的欧几里得距离计算
我刚接触Numpy,想请教一下怎么计算存储在向量中的点之间的欧几里得距离。
假设我们有一个numpy.array,每一行都是一个向量,还有一个单独的numpy.array。我想知道是否可以计算所有点与这个单独点之间的欧几里得距离,并把结果存储在一个numpy.array里。
这里有一个接口:
points #2d list of row-vectors
singlePoint #one row-vector
listOfDistances= procedure( points,singlePoint)
我们能不能做到这一点?或者有没有办法用一个命令,把单独的点当作其他点的列表,最后得到一个距离矩阵?
谢谢
5 个回答
7
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是因为我们没有正确理解某些概念。
当你在编程的时候,遇到问题时,首先要冷静下来,仔细检查你的代码。可以尝试逐行阅读,看看有没有拼写错误或者逻辑上的问题。
另外,查阅相关的文档或者在网上搜索类似的问题也是一个好办法。很多时候,别人也遇到过类似的情况,他们可能已经找到了解决方案。
如果你还是无法解决问题,可以考虑向社区求助,比如在StackOverflow上发帖,描述你的问题和你尝试过的解决办法。记得提供足够的信息,这样别人才能更好地帮助你。
总之,编程是一项需要耐心和细心的工作,遇到问题时不要气馁,慢慢来,总会找到解决办法的。
import numpy as np
def distance(v1, v2):
return np.sqrt(np.sum((v1 - v2) ** 2))
34
要计算距离,你可以使用numpy库中的linalg模块里的norm方法:
np.linalg.norm(x - y)
32
虽然你可以使用vectorize,但@Karl的方法在处理numpy数组时会比较慢。
更简单的方法是直接使用 np.hypot(*(points - single_point).T)
。这里的转置操作是因为我们假设points是一个Nx2的数组,如果它是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)