【问题标题】:Find the distance of each pair between two vectors求两个向量之间每对的距离
【发布时间】:2016-04-18 20:10:34
【问题描述】:

我有两个向量,比如说x=[2,4,6,7]y=[2,6,7,8],我想找到每个对应对之间的欧几里得距离或任何其他实现的距离(例如来自 scipy)。那将是 dist=[0, 2, 1, 1].

当我尝试时

dist = scipy.spatial.distance.cdist(x,y, metric='sqeuclidean')

dist = [scipy.spatial.distance.cdist(x,y, metric='sqeuclidean') for x,y in zip(x,y)]

我明白了

ValueError: XA must be a 2-dimensional array.

我应该如何计算 dist 以及为什么我必须为此目的重塑数据?

【问题讨论】:

  • 小心你在列表推导中使用的变量名 (for x, y)。执行理解后,它们仍然可见。在您的示例中,这些变量与 xy 向量相同,您是 zipping,因此在理解完成后,xy 将等于每个向量的最后一个值,而不是向量本身。

标签: python scipy


【解决方案1】:

cdist 不计算对应对之间的距离列表,而是计算所有对之间的距离矩阵。

np.linalg.norm((np.asarray(x)-np.asarray(y))[:, None], axis=1)

对于 n 维点之间的欧几里得距离,id 通常是如何写的;但如果你只处理一维点,那么绝对差异,正如 elpres 所建议的那样会更简单。

【讨论】:

  • xy 在此处列出用户提供的信息吗?我不确定这是否可行。
  • 我正在寻找可以让我从 scipy 应用任何已实现的距离度量的方法。实际上我需要一维向量的每个值与标量的距离。
  • 查看 linalg.norm 的 ord kwarg;它有很多针对不同规范的选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2021-07-15
  • 1970-01-01
相关资源
最近更新 更多