Может помочь, если (x+y)
не сплющено.Затем маска показывает значение True, для которого индексы x и y генерируют ненулевые строки.
import numpy as np
x = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
y= np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
x = np.expand_dims(x, 1)
temp = x + y
Создает маску, индексы x, y которой полностью ненулевые.
mask = ~np.any(temp == 0, axis=2)
mask
Out[8]:
array([[False, False, False, True],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[ True, False, False, False],
[False, False, False, True],
[False, False, False, False],
[False, False, False, False],
[ True, False, False, False]])
x_ix = np.indices((x.shape[0], y.shape[0]))[0, mask]
x_ix
Out[12]: array([0, 4, 5, 8])
y_ix = np.indices((x.shape[0], y.shape[0]))[1, mask]
y_ix
Out[13]: array([3, 0, 3, 0])
x_ixи массивы y_ix идентифицируют комбинации индексов, которые дают требуемые результаты.
Это может не дать именно то, что вам нужно, но может указывать на решение.