[英]How to compute the Euclidean distance in a list of vectors in SageMath
我有一個向量列表,我想計算列表中任何一對向量之間的最短距離。
V = [vector([x,y]) for x in [0..1] for y in [0..1]]
output: [(0, 0), (0, 1), (1, 0), (1, 1)]
我想得到從每個向量到另一個向量的距離。 output 的格式並不重要,但可能類似於
L=[(1,1,sqrt(2)),(1,sqrt(2),1),(1,sqrt(2),1),(sqrt(2),1,1)]
其中 L[i] 返回一個元組,該元組具有從 V[i] 到 V[j] (i.= j) 的距離。
最后我取最小的數字,在這種情況下為 1。我正在使用的向量可能並不總是有整數,但它們會超過實數。
我可以寫一個 function 來計算它,但我覺得 Sage 可能已經實現了它,我不知道。 最終,我想對更高維度的向量執行此計算。 在 Sage 中有沒有辦法做到這一點?
[(vw).norm() for v in V for w in V]
能給你想要的嗎? 還是[[(vw).norm() for v in V] for w in V]
? 第一個是一個大列表,而第二個是一個嵌套列表,一個對應於 V 中的每個 v。
norm
方法給出了向量的長度,因此這會計算向量集中對的每個差異vw
的長度。
編輯:從列表中刪除 0: [[(vw).norm() for v in V if v != w] for w in V]
或[[(vw).norm() for v in V if vw] for w in V]
在嵌套列表的情況下,或[(vw).norm() for v in V for w in V if vw]
或[(vw).norm() for v in V for w in V if v != w]
在未嵌套的情況下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.