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

时间:2019-08-30 14:20:35

标签: python arrays numpy dot-product

我有一个点(484,3,1)的3d numpy数组和一个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)

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

1 个答案:

答案 0 :(得分:0)

只需重整为def fn(nside): bar = ProgressBar(maxval = npix) bar.start() for i in range(0,npix): bar.update(i) for j in range(0,npix): hpxmap0[hp.ang2pix(nside, ma_theta[i], ma_phi[j])] = gaussian_2D(np.pi*(0.5) - ma_theta[i], ma_phi[j]) bar.finish() return hpxmap0 的尺寸并使用(484,3)np.matmul也可以,但是由于您要寻找矩阵乘法,因此np.dot是首选documentation)产品

matmul

最终的形状与最后一次重塑所给出的形状当然是相同的:np.matmul(points.reshape(484,-1), transformation).reshape(484,3,-1)