, linear indexing -
m,n = pts.shape
idx1 = np.arange(n)[:,None] + np.arange(n)*(n*(n+2))
idx2 = idx1 + np.arange(m)[:,None,None]*(n*n*(n+1))
idx3 = (n*n + np.arange(n)*(n*(n+1)+1)) + np.arange(m)[:,None]*(n*n*(n+1))
out = np.zeros((m*n,n*(n+1)),dtype=pts.dtype)
out.ravel()[idx2] = pts[:,:,None]
out.ravel()[idx3] = 1
-
In [550]: pts
Out[550]:
array([[47, 34],
[36, 25],
[29, 38],
[35, 20],
[37, 48]])
In [551]: m,n = pts.shape
...:
...: idx1 = np.arange(n)[:,None] + np.arange(n)*(n*(n+2))
...: idx2 = idx1 + np.arange(m)[:,None,None]*(n*n*(n+1))
...: idx3=(n*n + np.arange(n)*(n*(n+1)+1)) + np.arange(m)[:,None]*(n*n*(n+1))
...:
...: out = np.zeros((m*n,n*(n+1)),dtype=pts.dtype)
...: out.ravel()[idx2] = pts[:,:,None]
...: out.ravel()[idx3] = 1
...:
In [552]: out
Out[552]:
array([[47, 34, 0, 0, 1, 0],
[ 0, 0, 47, 34, 0, 1],
[36, 25, 0, 0, 1, 0],
[ 0, 0, 36, 25, 0, 1],
[29, 38, 0, 0, 1, 0],
[ 0, 0, 29, 38, 0, 1],
[35, 20, 0, 0, 1, 0],
[ 0, 0, 35, 20, 0, 1],
[37, 48, 0, 0, 1, 0],
[ 0, 0, 37, 48, 0, 1]])