我有一个顶点坐标矩阵(3 个顶点数)和一个边数组(2 个边数),它仅存储边两侧顶点的索引。 [[0,1] [1,2] [2.3]] 例如,这些数字是顶点矩阵中点的索引
我想创建一个边长数组,大概使用 linalg.norm 但我不确定如何以矢量化方式执行此操作。我知道我可以遍历边缘找到每个坐标的范数,但是我该如何在一个坐标中做到这一点呢?非常感谢
我可以很容易地循环浏览它,但不幸的是无法进一步掌握
这是一个例子。我将首先在 3 维中生成 10 个点,然后生成 4 个边。
import numpy as np
coordinates = np.random.randint(0,2,(10,3))
edges = np.random.randint(0,9,(4,2))
coordinates
现在是一个 10x3 矩阵,其中每行包含点的坐标 x,y,z。使用 0 和 2 之间的 randint
,坐标将为 0 或 1(更容易检查结果)。 edges
是一个 4x2 矩阵,其中每行包含边一侧的索引。
如果我们现在计算
edges_vectors = (coordinates[edges[:,0]] - coordinates[edges[:,1]])
我们有一个 4x3 矩阵,其中每一行对应一条边并包含这两个点之间的差异。现在我们要做的就是使用 numpy 的内置范数计算
edges_vectors
行的范数:
edge_norms = np.linalg.norm(edges_vectors,axis=1)
指定 axis=1 很重要,因为每行都是一个向量。