28、(向量)歐幾里得距離計算
基本思想:求一組樣本點到一組向量的最短距離,並且輸出其距離資訊
樣本向量點
已
知
的
樣
本
:
A
=
{
x
1
y
1
x
2
y
2
}
已
知
的
向
量
:
B
=
{
x
3
y
3
x
4
y
4
}
已知的樣本: A=\left\{ \begin{matrix} x_1\ y_1 \\ x_2\ y_2 \\ \end{matrix} \right\} \\ 已知的向量:B= \left\{ \begin{matrix} x_3\ y_3 \\ x_4\ y_4 \\ \end{matrix} \right\}
已知的樣本:A={x1 y1x2 y2}已知的向量:B={x3 y3x4 y4}
先推導一下基本公式:
d
13
=
(
x
1
−
x
3
)
2
+
(
y
1
−
y
3
)
2
=
x
1
2
+
x
3
2
−
2
x
1
x
2
+
y
1
2
+
y
3
2
−
2
y
1
y
2
d_{13}=\sqrt{(x_1-x_3)^2+(y_1-y_3)^2}=\sqrt{x_1^2+x_3^2-2x_1x_2+y_1^2+y_3^2-2y_1y_2}
d13=(x1−x3)2+(y1−y3)2=x12+x32−2x1x2+y12+y32−2y1y2
d 14 = ( x 1 − x 4 ) 2 + ( y 1 − y 4 ) 2 = x 1 2 + x 4 2 − 2 x 1 x 4 + y 1 2 + y 4 2 − 2 y 1 y 4 d_{14}=\sqrt{(x_1-x_4)^2+(y_1-y_4)^2}=\sqrt{x_1^2+x_4^2-2x_1x_4+y_1^2+y_4^2-2y_1y_4} d14=(x1−x4)2+(y1−y4)2=x12+x42−2x1x4+y12+y42−2y1y4
d 23 = ( x 2 − x 3 ) 2 + ( y 2 − y 3 ) 2 = x 2 2 + x 3 2 − 2 x 3 x 2 + y 2 2 + y 3 2 − 2 y 3 y 2 d_{23}=\sqrt{(x_2-x_3)^2+(y_2-y_3)^2}=\sqrt{x_2^2+x_3^2-2x_3x_2+y_2^2+y_3^2-2y_3y_2} d23=(x2−x3)2+(y2−y3)2=x22+x32−2x3x2+y22+y32−2y3y2
d 24 = ( x 2 − x 4 ) 2 + ( y 2 − y 4 ) 2 = x 4 2 + x 2 2 − 2 x 4 x 2 + y 4 2 + y 2 2 − 2 y 4 y 2 d_{24}=\sqrt{(x_2-x_4)^2+(y_2-y_4)^2}=\sqrt{x_4^2+x_2^2-2x_4x_2+y_4^2+y_2^2-2y_4y_2} d24=(x2−x4)2+(y2−y4)2=x42+x22−2x4x2+y42+y22−2y4y2
尋找樣本點對應的的最小距離
m
i
n
(
d
1
,
d
2
,
d
3
,
d
4
)
min{(d_1,d_2,d_3,d_4)}
min(d1,d2,d3,d4)
如果使用python 的numpy計算:
第一步,計算平方和矩陣A、B,其實類似
A
=
{
x
1
y
1
x
2
y
2
}
=
>
A
∗
A
T
=
>
A
′
=
{
x
1
2
+
y
1
2
x
2
2
+
y
2
2
x
1
2
+
y
1
2
x
2
2
+
y
2
2
}
A= \left\{ \begin{matrix} x_1\ y_1 \\ x_2\ y_2 \\ \end{matrix} \right\} =>A*A^T=>A'= \left\{ \begin{matrix} x_1^2+y_1^2 \ x_2^2 +y_2^2 \\ x_1^2+y_1^2\ x_2^2 +y_2^2 \\ \end{matrix} \right\}
A={x1 y1x2 y2}=>A∗AT=>A′={x12+y12 x22+y22x12+y12 x22+y22}
B = { x 3 y 3 x 4 y 4 } = > B ∗ B T = > B ′ = { x 3 2 + y 3 2 x 4 2 + y 4 2 x 3 2 + y 3 2 x 4 2 + y 4 2 } B= \left\{ \begin{matrix} x_3\ y_3 \\ x_4\ y_4 \\ \end{matrix} \right\} =>B*B^T=> B'=\left\{ \begin{matrix} x_3^2+y_3^2 \ x_4^2+y_4^2 \\ x_3^2+y_3^2\ x_4^2+y_4^2 \\ \end{matrix} \right\} B={x3 y3x4 y4}=>B∗BT=>B′={x32+y32 x42+y42x32+y32 x42+y42}
a2, b2 = np.square(a).sum(axis=1), np.square(b).sum(axis=1)
關於軸axis的變化參考:https://blog.csdn.net/sxj731533730/article/details/108831284
第二步:計算出
A
′
∗
B
′
T
A'*B'^T
A′∗B′T的乘積矩陣
A
∗
B
T
=
{
x
1
y
1
x
2
y
2
}
∗
{
x
3
y
3
x
4
y
4
}
T
=
>
C
=
{
x
1
∗
x
3
+
y
1
∗
y
3
x
1
∗
x
4
+
y
1
∗
y
4
x
2
∗
x
3
+
y
2
∗
y
3
x
2
∗
x
4
+
y
2
∗
y
4
}
A*B^T= \left\{ \begin{matrix} x_1\ y_1 \\ x_2\ y_2 \\ \end{matrix} \right\}* \left\{ \begin{matrix} x_3\ y_3 \\ x_4\ y_4 \\ \end{matrix} \right\}^T => C=\left\{ \begin{matrix} x_1*x_3+y_1*y_3\ x_1*x_4+y_1*y_4 \\ x_2*x_3+y_2*y_3\ x_2*x_4+y_2*y_4 \\ \end{matrix} \right\}
A∗BT={x1 y1x2 y2}∗{x3 y3x4 y4}T=>C={x1∗x3+y1∗y3 x1∗x4+y1∗y4x2∗x3+y2∗y3 x2∗x4+y2∗y4}
第三步進行計算距離
D
=
A
′
+
B
′
T
−
2
C
T
=
{
x
1
2
+
y
1
2
x
2
2
+
y
2
2
x
1
2
+
y
1
2
x
2
2
+
y
2
2
}
+
{
x
3
2
+
y
3
2
x
4
2
+
y
4
2
x
3
2
+
y
3
2
x
4
2
+
y
4
2
}
T
−
2
∗
{
x
1
∗
x
3
+
y
1
∗
y
3
x
1
∗
x
4
+
y
1
∗
y
4
x
2
∗
x
3
+
y
2
∗
y
3
x
2
∗
x
4
+
y
2
∗
y
4
}
T
D=A'+B'^T-2C^T=\left\{ \begin{matrix} x_1^2+y_1^2 \ x_2^2 +y_2^2 \\ x_1^2+y_1^2\ x_2^2 +y_2^2 \\ \end{matrix} \right\} +\left\{ \begin{matrix} x_3^2+y_3^2 \ x_4^2+y_4^2 \\ x_3^2+y_3^2\ x_4^2+y_4^2 \\ \end{matrix} \right\} ^T-2*\left\{ \begin{matrix} x_1*x_3+y_1*y_3\ x_1*x_4+y_1*y_4 \\ x_2*x_3+y_2*y_3\ x_2*x_4+y_2*y_4 \\ \end{matrix} \right\} ^T
D=A′+B′T−2CT={x12+y12 x22+y22x12+y12 x22+y22}+{x32+y32 x42+y42x32+y32 x42+y42}T−2∗{x1∗x3+y1∗y3 x1∗x4+y1∗y4x2∗x3+y2∗y3 x2∗x4+y2∗y4}T
D
=
A
′
+
B
′
T
−
2
C
T
=
{
x
1
2
+
y
1
2
+
x
3
2
+
y
3
2
x
2
2
+
y
2
2
+
x
3
2
+
y
3
2
x
1
2
+
y
1
2
+
x
4
2
+
y
4
2
x
2
2
+
y
2
2
+
x
4
2
+
y
4
2
}
−
2
∗
{
x
1
∗
x
3
+
y
1
∗
y
3
x
2
∗
x
3
+
y
2
∗
y
3
x
1
∗
x
4
+
y
1
∗
y
4
x
2
∗
x
4
+
y
2
∗
y
4
}
D=A'+B'^T-2C^T=\left\{ \begin{matrix} x_1^2+y_1^2+x_3^2+y_3^2 \ x_2^2 +y_2^2+ x_3^2+y_3^2 \\ x_1^2+y_1^2+x_4^2+y_4^2\ x_2^2 +y_2^2+ x_4^2+y_4^2 \\ \end{matrix} \right\}-2*\left\{ \begin{matrix} x_1*x_3+y_1*y_3\ x_2*x_3+y_2*y_3 \\ x_1*x_4+y_1*y_4 \ x_2*x_4+y_2*y_4 \\ \end{matrix} \right\}
D=A′+B′T−2CT={x12+y12+x32+y32 x22+y22+x32+y32x12+y12+x42+y42 x22+y22+x42+y42}−2∗{x1∗x3+y1∗y3 x2∗x3+y2∗y3x1∗x4+y1∗y4 x2∗x4+y2∗y4}
D
=
A
′
+
B
′
T
−
2
C
T
=
{
d
13
d
23
d
14
d
24
}
D=A'+B'^T-2C^T=\left\{ \begin{matrix} d_{13} \ d_{23} \\ d_{14}\ d_{24} \\ \end{matrix} \right\}
D=A′+B′T−2CT={d13 d23d14 d24}
import numpy as np
def _pdist(a, b):
a, b = np.asarray(a), np.asarray(b)
if len(a) == 0 or len(b) == 0:
return np.zeros((len(a), len(b)))
a2, b2 = np.square(a).sum(axis=1), np.square(b).sum(axis=1)
r2 = -2. * np.dot(a, b.T) + a2[:, None] + b2[None, :]
r2 = np.clip(r2, 0., float(np.inf))
return r2
def _nn_euclidean_distance(x, y):
distances = _pdist(x, y)
return np.maximum(0.0, distances.min(axis=0))
a=np.asarray([[6,7],[4,8]])
b=np.asarray([[6,8],[7,9]])
print(_nn_euclidean_distance(a,b)
測試結果
C:\Users\sxj\venv\Scripts\python.exe E:/deepsort/deep_sort/test.py
[1. 5.]
Process finished with exit code 0
C++:
相關文章
- milvus 使用 l2 歐式距離計算向量的距離,計算出來的距離的最大值是多少?
- 擴充套件歐幾里得套件
- 演算法設計與分析-01歐幾里得演算法
- 歐幾里得演算法與 EX演算法
- 萬能歐幾里得演算法演算法
- Python如何用歐幾里得求逆元Python
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- 計算幾何 —— 二維幾何基礎 —— 距離度量方法
- 馬氏距離與歐氏距離
- 2.5天完成1年的MD計算?DeepMind團隊基於歐幾里得Transformer的新計算方法ORM
- 類歐幾里得演算法學習筆記演算法筆記
- 淺談擴充套件歐幾里得演算法套件演算法
- 求矩陣中向量兩兩間的歐氏距離(python實現)矩陣Python
- PyTorch 實戰:計算 Wasserstein 距離PyTorch
- 擴充套件歐幾里得演算法公式快速推導套件演算法公式
- 洛谷 P6362 平面歐幾里得最小生成樹
- 視覺化學習:利用向量計算點到線段的距離並展示視覺化
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- Levenshtein:計算字串的編輯距離字串
- 最小距離分類器,互動式選取影像樣本分類資料,進行最小距離分類(實現歐式距離,馬氏距離,計程距離)
- 歐幾里德的遊戲遊戲
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- Spark/Scala實現推薦系統中的相似度演算法(歐幾里得距離、皮爾遜相關係數、餘弦相似度:附實現程式碼)Spark演算法
- JAVA計算兩經緯度間的距離Java
- 【leetcode】72. Edit Distance 編輯距離計算LeetCode
- 經緯度距離換算
- 距離AI風口1000公里的生死時速AI
- 計算地圖中兩點之間的距離地圖
- IBM量子計算機亮相 距離標準量子計算機相距甚遠IBM計算機
- CCF NOI 1028 判斷互質 :利用歐幾里得演算法最大公因數演算法
- 微信小程式——計算2點之間的距離微信小程式
- 透過經緯度計算距離獲取附近商家
- 第六章 數學問題 -------- 6.5 歐幾里得演算法及其擴充套件演算法套件
- Python 計算多少天前後、距離 X日多久的日期Python
- 通過sql 計算兩經緯度之間的距離SQL