Assuming you have your arrays in some sort of container (you can always put them in a container):
>>> ax = [np.random.randint(0, 10, (3,3)) for _ in range(4)]
>>> ax
[array([[0, 3, 1],
[4, 2, 4],
[2, 2, 8]]), array([[8, 4, 6],
[7, 1, 4],
[8, 9, 8]]), array([[6, 3, 8],
[4, 6, 8],
[2, 2, 9]]), array([[1, 8, 1],
[0, 9, 2],
[9, 2, 3]])]
So, you can use np.concatenate but you have to reshape as well:
>>> final = np.concatenate([arr.reshape(1, 3,3,1) for arr in ax], axis=0)
with a result:
>>> final.shape
(4, 3, 3, 1)
>>> final
array([[[[0],
[3],
[1]],
[[4],
[2],
[4]],
[[2],
[2],
[8]]],
[[[8],
[4],
[6]],
[[7],
[1],
[4]],
[[8],
[9],
[8]]],
[[[6],
[3],
[8]],
[[4],
[6],
[8]],
[[2],
[2],
[9]]],
[[[1],
[8],
[1]],
[[0],
[9],
[2]],
[[9],
[2],
[3]]]])
>>>
Edit
Inspired by @Divakar to be more generic:
np.concatenate([arr[None,..., None] for arr in ax], axis=0)