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

问题描述 投票:0回答:1

我有一个顶点坐标矩阵(3 个顶点数)和一个边数组(2 个边数),它仅存储边两侧顶点的索引。 [[0,1] [1,2] [2.3]] 例如,这些数字是顶点矩阵中点的索引

我想创建一个边长数组,大概使用 linalg.norm 但我不确定如何以矢量化方式执行此操作。我知道我可以遍历边缘找到每个坐标的范数,但是我该如何在一个坐标中做到这一点呢?非常感谢

我可以很容易地循环浏览它,但不幸的是无法进一步掌握

numpy vectorization
1个回答
0
投票

这是一个例子。我将首先在 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 很重要,因为每行都是一个向量。

© www.soinside.com 2019 - 2024. All rights reserved.