Вы можете просто отсортировать по последней оси:
>>> import numpy as np
>>>
# create example
>>> a = np.identity(4, int)[np.random.randint(0, 4, (2, 2, 2)), :-1]
>>> a
array([[[[1, 0, 0],
[0, 0, 1]],
[[0, 0, 1],
[0, 0, 0]]],
[[[0, 0, 1],
[1, 0, 0]],
[[0, 0, 0],
[0, 0, 1]]]])
>>>
>>> b = a.copy()
# flip last axis to obtain descending order
>>> b[..., ::-1].sort(axis=-1)
>>> b
array([[[[1, 0, 0],
[1, 0, 0]],
[[1, 0, 0],
[0, 0, 0]]],
[[[1, 0, 0],
[1, 0, 0]],
[[0, 0, 0],
[1, 0, 0]]]])
Другие методы:
1) предварительно выделить
>>> b = np.zeros_like(a)
>>> b[..., 0] = a.any(axis=-1)
2) Продукт Kronecker
>>> np.kron(a.any(axis=-1, keepdims=True), (1,0,0))
3) внешнее произведение
>>> np.multiply.outer(a.any(axis=-1), (1,0,0))
4) необычное индексирование
>>> np.outer((0,1), (1,0,0))[a.any(axis=-1).view(np.uint8)]