I'm looking for a fast implementation for the following, I'll call it Position2D for lack of a better term:

Position2D[ matrix, sub_matrix ]

which finds the locations of sub_matrix inside matrix and returns the upper left and lower right row/column of a match.

For example, this:

Position2D[{
 {0, 1, 2, 3},
 {1, 2, 3, 4},
 {2, 3, 4, 5},
 {3, 4, 5, 6}
}, {
 {2, 3},
 {3, 4}
}]

should return this:

{
 {{1, 3}, {2, 4}},
 {{2, 2}, {3, 3}},
 {{3, 1}, {4, 2}} 
}

It should be fast enough to work quickly on 3000x2000 matrices with 100x100 sub-matrices. For simplicity, it is enough to only consider integer matrices.

Edit
Report