簡體   English   中英

如何廣播這個歐氏距離?

[英]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 以在此處找到歐氏距離。

我假設list1list2包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM