Python numpy.linalg.lstsq的矢量化
我有两组点(A1,A2,B1,B2),我想计算它们的仿射变换(从A1到B1,从A2到B2)。 使用numpy.linalg.lstsq,这对于单个案例来说非常简单:Python numpy.linalg.lstsq的矢量化,python,numpy,vectorization,array-broadcasting,affinetransform,Python,Numpy,Vectorization,Array Broadcasting,Affinetransform,我有两组点(A1,A2,B1,B2),我想计算它们的仿射变换(从A1到B1,从A2到B2)。 使用numpy.linalg.lstsq,这对于单个案例来说非常简单: A1 = [[100 0 0] [ 0 100 0] [100 100 0] [ 0 0 100] [100 100 100]] B1 = [[160 0 0] [ 0 160 0] [160 160 0]
A1 = [[100 0 0]
[ 0 100 0]
[100 100 0]
[ 0 0 100]
[100 100 100]]
B1 = [[160 0 0]
[ 0 160 0]
[160 160 0]
[ 0 0 160]
[160 160 160]]
A1 = np.hstack([A1, np.ones((A1.shape[0], 1))])
B1 = np.hstack([B1, np.ones((B2.shape[0], 1))])
affine_transformation = np.linalg.lstsq(A1, B1, rcond=None)[0].transpose()
我想对它进行矢量化,以计算不带循环的多组点。我想以这样的方式结束:
pts_a = np.array([A1, A2])
pts_a = np.pad(pts_a, ((0, 0), (0, 0), (0,1)), mode='constant', constant_values=1)
pts_b = np.array([B1, B2])
pts_b = np.pad(pts_b, ((0, 0), (0, 0), (0,1)), mode='constant', constant_values=1)
affine_transformation = np.linalg.lstsq(pts_a, pts_b, rcond=None)[0].transpose()
非常感谢您的帮助 我使用以下方法对其进行排序:
affine_transformation = np.asarray([np.linalg.lstsq(pts_a[i,:,:], pts_b[i,:,:], rcond=None)[0].transpose() for i in range(pts_a.shape[0])])
有没有更有效的方法