import numpy as np
r, c = 3, 4 # x.shape
x = np.arange(12) + 1 # Already raveled
inds = np.arange(x.size)
rows = np.repeat(np.arange(r).reshape(-1, 1), c, axis=1).ravel()
np.random.shuffle(inds)
x = x[inds]
rows = rows[inds]
inds = np.argsort(rows, kind='mergesort')
x = x[inds].reshape(r, c)
print(x)
aW1wb3J0IG51bXB5IGFzIG5wCgpyLCBjID0gMywgNCAgIyB4LnNoYXBlCgp4ID0gbnAuYXJhbmdlKDEyKSArIDEgICMgQWxyZWFkeSByYXZlbGVkIAppbmRzID0gbnAuYXJhbmdlKHguc2l6ZSkKcm93cyA9IG5wLnJlcGVhdChucC5hcmFuZ2UocikucmVzaGFwZSgtMSwgMSksIGMsIGF4aXM9MSkucmF2ZWwoKQoKbnAucmFuZG9tLnNodWZmbGUoaW5kcykKeCA9IHhbaW5kc10Kcm93cyA9IHJvd3NbaW5kc10KCmluZHMgPSBucC5hcmdzb3J0KHJvd3MsIGtpbmQ9J21lcmdlc29ydCcpCnggPSB4W2luZHNdLnJlc2hhcGUociwgYykKCnByaW50KHgp