如何使用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]))]
FWBOOO 回答:如何使用numpy向量化矩阵中几行的运算

numpy documentation是您的朋友:-)。

np.crossnp.linalg.norm也可以处理向量数组。并且它们支持功能强大的关键字参数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:,:]
area = 0.5*np.linalg.norm(np.cross(v1,v2),axis=1)

请注意,这涉及到临时数组的创建,因此请留意非常大的N

本文链接:https://www.f2er.com/3143233.html

大家都在问