Для простоты предположим, что мы ищем все места, где все 3 канала равны 1. Это сделает работу:
np.random.seed(0)
a=np.random.randint(0,2,(3,5,5))
print(a)
np.where((a[0]==1)*(a[1]==1)*(a[2]==1))
Это выдаст
[[[0 1 1 0 1]
[1 1 1 1 1]
[1 0 0 1 0]
[0 0 0 0 1]
[0 1 1 0 0]]
[[1 1 1 1 0]
[1 0 1 0 1]
[1 0 1 1 0]
[0 1 0 1 1]
[1 1 1 0 1]]
[[0 1 1 1 1]
[0 1 0 0 1]
[1 0 1 0 1]
[0 0 0 0 0]
[1 1 0 0 0]]]
(array([0, 0, 1, 2, 4], dtype=int64), array([1, 2, 4, 0, 1], dtype=int64))
И действительноесть 5 координат, в которых все 3 канала равны 1. Если вы хотите получить более легкое для чтения представление, замените последнюю строку на
tuple(zip(*np.where((a[0]==1)*(a[1]==1)*(a[2]==1))))
. Это выведет
((0, 1), (0, 2), (1, 4), (2, 0), (4, 1))
это все 5 мест, где все 3 канала равны 1.
Обратите внимание, что (a[0]==1)*(a[1]==1)*(a[2]==1)
- это просто
array([[False, True, True, False, False],
[False, False, False, False, True],
[ True, False, False, False, False],
[False, False, False, False, False],
[False, True, False, False, False]])
логическое представление, которое вы искали.
Если вы хотите получить любой другой триплет, скажем, [143, 255, 0]
, просто используйте (a[0]==143)*(a[1]==255)*(a[2]==0)
.