当前位置: 首页 > 知识库问答 >
问题:

计算两个python数组之间的欧氏距离

濮阳原
2023-03-14

我想写一个函数来计算list\u a中的坐标与list\u b中的每个坐标之间的欧氏距离,并通过b列生成维度a行的距离数组(其中a列表a中的坐标数,b列表b中的坐标数)。

NB:为了简单起见,我不想使用任何其他库。

list_a = np.array([[0,1], [2,2], [5,4], [3,6], [4,2]])
list_b = np.array([[0,1],[5,4]])

运行该函数将生成:

>>> np.array([[0., 5.830951894845301],
              [2.236, 3.605551275463989],
              [5.830951894845301, 0.],
              [5.830951894845301, 2.8284271247461903],
              [4.123105625617661, 2.23606797749979]])

我一直在试着运行下面的程序

def run_euc(list_a,list_b):
    euc_1 = [np.subtract(list_a, list_b)]
    euc_2 = sum(sum([i**2 for i in euc_1]))
    return np.sqrt(euc_2)

但我得到以下错误:

ValueError: operands could not be broadcast together with shapes (5,2) (2,2)

非常感谢。

共有3个答案

昝成弘
2023-03-14

我认为这是可行的

  import numpy as np
  def distance(x,y):
      x=np.array(x)
      y=np.array(y)
      p=np.sum((x-y)**2)
      d=np.sqrt(p)
      return d
施旭东
2023-03-14

我想知道是什么阻止你使用Scipy。既然您正在使用numpy,也许您可以尝试使用Scipy,它不是很重。

为什么啊?
它有许多具有高效实现的数学函数,可以很好地利用您的计算能力。

考虑到这一点,这里有一个距离矩阵函数,正是为了您所提到的目的。

具体地说,它获取列表a(m x k矩阵)和列表b(n x k矩阵),并输出两个矩阵中每对点之间具有p-范数(p=2表示欧几里德)距离的m x n矩阵。

from scipy.spatial import distance_matrix
distances = distance_matrix(list_a, list_b)
陶鸿畴
2023-03-14

在这里,您可以使用np.linalg.norm来计算欧几里德距离。您的错误是由于np.subtract期望两个输入具有相同的长度。

import numpy as np

list_a = np.array([[0,1], [2,2], [5,4], [3,6], [4,2]])
list_b = np.array([[0,1],[5,4]])

def run_euc(list_a,list_b):
    return np.array([[ np.linalg.norm(i-j) for j in list_b] for i in list_a])

print(run_euc(list_a, list_b))

该代码生成:

[[0.         5.83095189]
 [2.23606798 3.60555128]
 [5.83095189 0.        ]
 [5.83095189 2.82842712]
 [4.12310563 2.23606798]]
 类似资料:
  • 我试图将X Y Z变量的数组或列表传递给计算欧几里德距离的方法。 这是我的方法: 这是我的主要代码: 输出为:1.7782794。。应该是10的时候。有什么想法吗?

  • 返回两点之间的欧氏距离。 使用 Math.hypot() 计算两点之间的欧氏距离( Euclidean distance)。 const distance = (x0, y0, x1, y1) => Math.hypot(x1 - x0, y1 - y0); distance(1, 1, 2, 3); // 2.23606797749979

  • > 将图像重塑为一对列向量和行向量: 计算度量矩阵G,其条目由公式给出 其中,r是一个从0到20变化的全局参数,d是像素i和像素j之间的距离。E、 例如,如果像素i是(k,l),像素j是(k1,l1),则d=sqrt((k-k1)^2(l-l1)^2) 。像素1将是(1,1),像素2将是(1,2),依此类推。因此,矩阵G的大小将为1638400×1638400。 计算两个图像之间的最终(标量)欧几

  • 问题内容: 我对计算两个numpy数组(x和y)之间的各种空间距离感兴趣。 http://docs.scipy.org/doc/scipy-0.14.0/reference/generation/scipy.spatial.distance.cdist.html 但是,以上结果会产生太多不必要的结果。我如何仅将其限制为所需的结果。 我想计算[1,11]和[31,41]之间的距离;[2,22]和[3

  • 我有一份清单。我想找到所有对和自身之间的欧几里德距离,并创建一个2D numpy数组。当对不同时,其自身之间的距离的位置和值将为0。列表列表的示例:我想要的结果是 x表示差异的值。周期意味着结果应遵循矩阵中所示。我需要python代码方面的帮助。行和列中0、1、2等的数量定义了内部列表索引。

  • 问题内容: 继一些在线调查(1,2,numpy的,SciPy的,scikit,数学),我已经找到了计算的几种方法 在Python欧氏距离 : 我想知道是否有人可以就 效率* 和 精度 方面认为上述哪一项( 或我未找到的其他任何 理由)提供最佳见解。如果有人知道任何的 资源(S) ,其中讨论的主题,这也将是巨大的。 *** __ 的 背景下 ,我在有趣的是,在计算对数元组之间的欧氏距离,例如之间的距