It's not straigtforward (and it might be improved), but it does the job quit fastly even for huge vectors :-).
import time import numpy as np n,m=1_000_000, 4_000_000 a=np.ones((n), dtype=int) b=2*np.ones((m), dtype=int) t0=time.time() La=len(a) Lb=len(b) if (Lb<La): c=np.concatenate((a[:Lb], b)) c=np.reshape(c, (Lb, 2), order='f') c=np.reshape(c, (2*Lb), order='c') c=np.concatenate((c, a[Lb::])) elif (Lb>La): c=np.concatenate((a, b[:La])) c=np.reshape(c, (La, 2), order='f') c=np.reshape(c, (2*La), order='c') c=np.concatenate((c, b[La::])) else: c=np.concatenate((a, b)) c=np.reshape(c, (La, 2), order='f') c=np.reshape(c, (2*La), order='c') t1=time.time() print(f"Duration={t1-t0}")