Мне очень нравится Sven , и на самом деле, numpy.where
делает именно то, что вы хотите, как напомнил мне Крюк.Но в основном потому, что я это уже написал, вот другой подход, просто чтобы проиллюстрировать несколько трюков.my_filter
может быть любой функцией, возвращающей логический массив той же формы, что и входные данные:
def my_filter(a):
return (10 < a) & (a < 40)
a_mask = my_filter(a)
indices = [ind[a_mask] for ind in numpy.indices(a.shape)]
Например:
>>> a = numpy.arange(100).reshape((10, 10))
>>> def my_filter(a):
... return (min_value < a) & (a < max_value)
...
>>> a_mask = my_filter(a)
>>> [ind[a_mask] for ind in numpy.indices(a.shape)]
[array([1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3]),
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
4, 5, 6, 7, 8, 9])]