如何计算多个点的仿射变换?

How to compute an affine transformation of multiple points?

我有一个 3d numpy 点数组 (484,3,1) 和一个 2d 变换矩阵 (3,3)。我想计算所有 484 个点的变换。

我试图重塑数组并计算点积,但我很难让它输出一个 (484,3,1) 形数组,其中所有点都被转换。

points = np.random.randint(0, 979, (484,3,1)) 
transformation = array([[0.94117647, 0.        , 0.        ],
                        [0.        , 0.94117647, 0.        ],
                        [0.        , 0.        , 1.        ]])

points.shape = (484,3,1)
transformation = (3,3)

transformation.dot(points).shape = (3,484,1)

我希望尽可能对其进行优化。任何建议将不胜感激。

只需对 (484,3) 维度进行整形并使用 np.matmulnp.dot 也是可能的,但由于您正在寻找矩阵乘法 matmul 是首选documentation) 产品

np.matmul(points.reshape(484,-1), transformation).reshape(484,3,-1)

结果形状当然与上次重塑给出的形状相同:(484,3,1)