如何计算 SageMath 中向量列表中的欧氏距离

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)]

我想得到每个向量到另一个向量的距离。输出格式并不重要,但可能类似于

L=[(1,1,sqrt(2)),(1,sqrt(2),1),(1,sqrt(2),1),(sqrt(2),1,1)]

其中 L[i] returns 具有从 V[i] 到 V[j] (i != j) 的距离的元组。

最后我取了最小的数字,在本例中为 1。我使用的向量可能并不总是整数,但它们会大于实数。

我可以写一个函数来计算这个,但我觉得 Sage 可能已经实现了它,但我不知道。最终,我想对更高维度的向量执行此计算。在 Sage 中有解决这个问题的方法吗?

[(v-w).norm() for v in V for w in V]能给到你想要的吗?还是[[(v-w).norm() for v in V] for w in V]?第一个是一个大列表,而第二个是嵌套列表,V中的每个v一个。

norm 方法给出向量的长度,因此这会计算向量集中每个对的每个差异 v-w 的长度。

编辑:从列表中删除 0:在嵌套列表的情况下为 [[(v-w).norm() for v in V if v != w] for w in V][[(v-w).norm() for v in V if v-w] for w in V],在未嵌套的列表中为 [(v-w).norm() for v in V for w in V if v-w][(v-w).norm() for v in V for w in V if v != w]案例.