简体   繁体   中英

How to compute an affine transformation of multiple points?

I have a 3d numpy array of point (484,3,1) and a 2d transformation matrix (3,3). I want to compute the transformation for all 484 points.

I have tried to reshape the arrays and compute the dot product, but I am struggling to get it to output a (484,3,1) shaped array where all the points are transformed.

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)

I would like this to be as optimized as possible. Any advice would be greatly appreciated.

Just do a reshape to (484,3) dimensions and use the np.matmul ( np.dot is also possible but since you are looking for a matrix multiplication matmul is prefered according to the documentation ) product

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

resulting shape is the same of course given by the last reshaping: (484,3,1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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