numpy 创建点之间的长度数组,指向另一个数组的索引

e4eetjau  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(75)

我有一个顶点坐标矩阵(3乘以顶点数)和一个边数组(2乘以边数),它只存储边两边顶点的索引。[[0,1] [1,2] [2.3]]例如,这些数字是顶点矩阵中的点的索引
我想创建一个边长数组,大概使用linalg.norm,但我不确定如何以矢量化的方式做到这一点。我知道我可以遍历这些边,找到每个坐标的范数,但我怎么在一个坐标中做到这一点呢?非常感谢
我可以很容易地通过它循环,但不幸地失败,以掌握进一步

jucafojl

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矩阵,其中每行包含边的一边的索引。
如果我们现在计算

edges_vectors = (coordinates[edges[:,0]] - coordinates[edges[:,1]])

我们有一个4 × 3的矩阵,其中每行对应于一条边,并包含这两个点之间的差。现在我们所要做的就是使用numpy的内置范数计算edges_vectors的行的范数:

edge_norms = np.linalg.norm(edges_vectors,axis=1)

指定axis=1很重要,因为每行都是一个向量。

相关问题