Suppose, I got a 2D (n \times 2*n) numpy array like below,
dat = np.array([[1,2,3,4],[5,6,7,8]])
I want to split it into two 2d array equally, and then create a 2d diagonal block array, like below,
a = dat[:,0:2]
b = dat[:,2:]
result = np.block([
[a, np.zeros((2, 2))],
[np.zeros((2, 2)), b ]
])
Is there any better way in numpy that I dont need to specify this part "np.zero((n,n))"