我有一个顶点坐标矩阵(3乘以顶点数)和一个边数组(2乘以边数),它只存储边两边顶点的索引。[[0,1] [1,2] [2.3]]例如,这些数字是顶点矩阵中的点的索引我想创建一个边长数组,大概使用linalg.norm,但我不确定如何以矢量化的方式做到这一点。我知道我可以遍历这些边,找到每个坐标的范数,但我怎么在一个坐标中做到这一点呢?非常感谢我可以很容易地通过它循环,但不幸地失败,以掌握进一步
jucafojl1#
这里有一个例子。我将首先生成10个点在3维,然后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矩阵,其中每行包含边的一边的索引。如果我们现在计算
coordinates
randint
edges
edges_vectors = (coordinates[edges[:,0]] - coordinates[edges[:,1]])
我们有一个4 × 3的矩阵,其中每行对应于一条边,并包含这两个点之间的差。现在我们所要做的就是使用numpy的内置范数计算edges_vectors的行的范数:
edges_vectors
edge_norms = np.linalg.norm(edges_vectors,axis=1)
指定axis=1很重要,因为每行都是一个向量。
1条答案
按热度按时间jucafojl1#
这里有一个例子。我将首先生成10个点在3维,然后4边。
coordinates
现在是一个10x3矩阵,其中每行包含点的坐标x,y,z。在0和2之间使用randint
,坐标将为0或1(更容易检查结果)。edges
是一个4x2矩阵,其中每行包含边的一边的索引。如果我们现在计算
我们有一个4 × 3的矩阵,其中每行对应于一条边,并包含这两个点之间的差。现在我们所要做的就是使用numpy的内置范数计算
edges_vectors
的行的范数:指定axis=1很重要,因为每行都是一个向量。