如何广播这个欧氏距离?
How to broadcast this euclidean distance?
所以,我有这段代码,我试图计算 list1 上每个元素的欧氏距离
如果 list1 有 2 个元素,它会抛出一个错误,对此有什么想法吗?
import numpy as np
from scipy.spatial import distance
list1 =[(10.2,20.2),(5.3,9.2)]
list2 = [(2.2,3.3)]
list1 =np.array(list1)
dist1= distance.euclidean(list1,list2)
print("distance",dist1)
打印:
ValueError: Input vector should be 1-D.
正如您所说,for 循环在这里可能是最简单的。我已将您的列表更改为列表列表而不是元组列表,尽管我不确定这是否真的有必要。我没有安装 scipy 来检查。
from scipy.spatial import distance
list1 =[[10.2,20.2],[5.3,9.2]]
list2 = [2.2,3.3]
for point in list1:
dist1= distance.euclidean(point,list2)
print("distance",dist1)
您可以直接操作 numpy
数组以在此处找到欧氏距离。
我假设 list1
或 list2
包含 1
元素,并且要计算另一个列表的每个元素与单个元素之间的距离。 numpy broadcasting.
负责休息
import numpy as np
list1 =[(10.2,20.2),(5.3,9.2)]
list2 = [(2.2,3.3)]
a = np.array(list1)
b = np.array(list2)
dist = np.sqrt(((b - a)**2).sum(axis = 1))
输出:dist
array([18.69786084, 6.66483308])
其中 dist[0]
给出 distance(list1[0], list2[0])
而 dist[1]
给出 distance(list1[1], list2[0])
.
即使 list1
有任意数量的点,它也可以概括,唯一的限制是另一个列表应该只有一个点。
所以,我有这段代码,我试图计算 list1 上每个元素的欧氏距离 如果 list1 有 2 个元素,它会抛出一个错误,对此有什么想法吗?
import numpy as np
from scipy.spatial import distance
list1 =[(10.2,20.2),(5.3,9.2)]
list2 = [(2.2,3.3)]
list1 =np.array(list1)
dist1= distance.euclidean(list1,list2)
print("distance",dist1)
打印:
ValueError: Input vector should be 1-D.
正如您所说,for 循环在这里可能是最简单的。我已将您的列表更改为列表列表而不是元组列表,尽管我不确定这是否真的有必要。我没有安装 scipy 来检查。
from scipy.spatial import distance
list1 =[[10.2,20.2],[5.3,9.2]]
list2 = [2.2,3.3]
for point in list1:
dist1= distance.euclidean(point,list2)
print("distance",dist1)
您可以直接操作 numpy
数组以在此处找到欧氏距离。
我假设 list1
或 list2
包含 1
元素,并且要计算另一个列表的每个元素与单个元素之间的距离。 numpy broadcasting.
import numpy as np
list1 =[(10.2,20.2),(5.3,9.2)]
list2 = [(2.2,3.3)]
a = np.array(list1)
b = np.array(list2)
dist = np.sqrt(((b - a)**2).sum(axis = 1))
输出:dist
array([18.69786084, 6.66483308])
其中 dist[0]
给出 distance(list1[0], list2[0])
而 dist[1]
给出 distance(list1[1], list2[0])
.
即使 list1
有任意数量的点,它也可以概括,唯一的限制是另一个列表应该只有一个点。