如何计算 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]
案例.
我有一个向量列表,我想计算列表中任意一对向量之间的最短距离。
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]
案例.