title: How to obtain an m*n sub-matrix from a p*q larger matrix in numpy
body: <p>Came across this while trying to solve a sudoku related question. </p>
  
  <p>I need to return all the 3*3 matrices from the larger 9*9 matrix. </p>
  
  <p>Is there any direct way of doing this in numpy? </p>
  
  <p>My current approach involves performing two splits- first in the horizontal direction and then a vertical split on each element in the list obtained from previous split</p>
  
  <pre><code>grid= np.array([[5,3,4,6,7,8,9,1,2],
       [6,7,2,1,9,5,3,4,8],
       [1,9,8,3,3,2,5,6,7],
       [8,5,9,7,6,1,4,2,3],
       [4,2,6,8,5,3,7,9,1],
       [7,1,3,9,2,4,8,5,6],
       [9,6,1,5,3,7,2,8,4],
       [2,8,7,4,1,9,6,3,5],
       [3,4,5,2,8,6,1,7,9]])
  
  
  for i in np.split(grid,3):
      for t in (np.hsplit(i,3)):
          print(t)
  </code></pre>