Extracting submatrices is possible using two methods, which have already been suggested in the existing answers. Here is a summary using this matrix:
Y: array([[4, 1, 4, 3, 1],
[3, 1, 2, 3, 1],
[4, 3, 2, 2, 4],
[2, 4, 3, 2, 3],
[2, 1, 4, 4, 3]])
Your submatrix is a contiguous rectangular region of the original matrix, then use regular range indexing. E.g to extract the region at intersection of rows 3,4 and cols 2,3:

>>> Y[3:, 2:4]
>>> array([[3, 2],
>>> [4, 4]])
You submatrix is not a contiguous region, some rows and/or columns have been removed within this region, then you must build a mesh of valid cells, and use it as a mask. Fortunately this is the purpose of numpy:ix_, e.g. to extract the intersection of rows 1, 3 and columns 0,3:

>>> np.ix_((1,3), (0,3))
>>> (array([[1],
>>> [3]]),
>>> array([[0, 3]]))
>>>
>>> Y[np.ix_((1,3), (0,3))]
>>> array([[3, 3],
>>> [2, 2]])
Note np.ix_((1,3), (0,3)) is strictly equivalent to [[1],[3]],[0, 3], so you can use it directly instead of calling the meshgrid builder:
>>> Y[[[1],[3]],[0, 3]]
>>> array([[3, 3],
>>> [2, 2]])