b = a.swapaxes(axis, -1)
shp = b.shape[:-1]
for ndx in np.ndindex(shp):
    np.random.shuffle(b[ndx])
return

def random_bits(a, n):
    b = (a[..., (np.newaxis)] > np.arange(n)).astype(int)
shuffle(b)
return b
if __name__ == '__main__':
    np.random.seed(12345)
A = np.random.randint(0, 5, size=(3, 4))
Z = 6
B = random_bits(A, Z)
print('A:')
print(A)
print('B:')
print(B)
быстро вычислить рандомизированный массив 3D numpy из массива 2D numpy