I'd like to select (offset) indexes of a number of array points, that match a selection criteria. I can do this by creating a Table of all the coordinates, and then selecting all the values:

```
data = Array[ RandomInteger[1] &, {4, 4}]
{wx, wy} = data // Dimensions ;
t = Flatten[
  Table[ {x - wx/2, y - wy/2, data[[x]][[y]]}, {x, 1, wx}, {y, 1,
    wy}], 1]
Select[ t, #[[3]] == 1 &]

```

This resulted in the respective values:

```
{{1, 1, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 0}, {1, 0, 0, 1}}
{{-1, -1, 1}, {-1, 0, 1}, {-1, 1, 1}, {-1, 2, 1}, {0, -1, 1}, {0, 0,
  0}, {0, 1, 0}, {0, 2, 1}, {1, -1, 1}, {1, 0, 0}, {1, 1, 1}, {1, 2,
  0}, {2, -1, 1}, {2, 0, 0}, {2, 1, 0}, {2, 2, 1}}
{{-1, -1, 1}, {-1, 0, 1}, {-1, 1, 1}, {-1, 2, 1}, {0, -1, 1}, {0, 2,
  1}, {1, -1, 1}, {1, 1, 1}, {2, -1, 1}, {2, 2, 1}}

```

However, my real data is big (800x800) and sparse. This method creates a big data set and then throws most of it away. What is a more efficient way to do this?