[英]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.
您可以直接操作numpy
arrays 以在此處找到歐氏距離。
我假設list1
或list2
包含1
元素,並且要計算另一個列表的每個元素與單個元素之間的距離。 Rest 由numpy 廣播處理。
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
具有任意數量的點,它也可以概括,唯一的限制是另一個列表應該只有一個點。
正如您所說,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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.