繁体   English   中英

如何使用 numpy 对矩阵中的多行进行矢量化操作

[英]How to vectorize operations over several rows in a matrix with numpy

我正在使用 Trimesh,并尝试计算网格的一些统计数据。 可能的统计数据之一(也是我用来说明问题的统计数据)是网格的 3 个随机顶点的区域的直方图。 目前我正在执行以下操作,但我想知道是否有任何方法可以避免使用循环。

def CalcArea(self, p):
    return 0.5 * np.linalg.norm(np.cross(p[1]-p[0], p[2]-p[0]))

v_c = self.mesh.vertices.copy()
np.random.shuffle(v_c)
areas = [self.CalcArea(v_c[i:i+3]) for i in range(len(v_c[:-2]))]

numpy 文档是您的朋友:-)。

np.crossnp.linalg.norm适用于向量的 arrays。 他们支持强大的关键字参数axis

我假设您的v_c具有形状(N, 3) ,其中N是您的顶点数。 为简单起见,我们假设它是三的倍数,然后:

N = 30
v_c = np.random.random((N, 3))
v1 = v_c[N//3:2*N//3, :] - v_c[:N//3, :]
v2 = v_c[2*N//3:, :] - v_c[:N//3, :]
area = 0.5*np.linalg.norm(np.cross(v1, v2), axis=1)

请注意,这涉及临时 arrays 的创建,因此请注意非常大的N

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM