将线性变换列表应用于点云列表



假设我有一个由n个点云组成的数组(每个点包含m个点,维数为d(,然后是一个由表示线性变换的n个矩阵组成的列表(每个矩阵都是dxd(。有没有一种矢量化的方法可以将每个矩阵与其对应的点云相乘?(即,将第一矩阵与第一点云中的每个点相乘,将第二矩阵与第二点云中的各个点相乘,等等(

例如,这里有一个我希望能够使用For循环进行的示例计算:

import numpy as np
points = np.random.rand(3,5,2)
mats = np.array([np.eye(2), -np.eye(2), 2*np.eye(2)])
out = np.zeros((3,5,2))
for i in range(points.shape[0]):
out[i,:] = np.matmul(points[i,:], mats[i])

在这种情况下,第一个云中的每个点都应该保持不变,第二个云中的每个点的符号都应该翻转,第三个云中的每一个点的每个分量都应该加倍。

我很感激你能提供的任何帮助——我已经尝试了一段时间,但没有成功!

我认为您不需要循环:

out = np.matmul(points, mats)

或者对于Python 3.5+:

out = points @ mats

您可以使用np.einsum:实现这一点

out = np.einsum('cmd,cdd->cmd', points, mats)

其中c将对应于m对应于并且d对应于特征

最新更新