Я могу вспомнить пару оптимизаций там -
Поскольку вы используете 4 вложенных оператора «for» для python, вы работаете настолько медленно, насколько это возможно.
Я не могу точно понять, что вы ищете -
но, с одной стороны, если плотность вашей большой матрицы «1» низкая, вы, безусловно, можете использовать функцию python «any» на срезах bigMtarix, чтобы быстро проверить, есть ли там какие-либо заданные элементы - вы можете получить увеличение скорости в несколько раз. есть:
step = len(smallMatrix[0])
for y in xrange(0, len(bigMatrix[0], step)):
for x in xrange(0, len(bigMatrix), step):
if not any(bigMatrix[x: x+step, y: y + step]):
continue
(...)
На этом этапе, если вам все еще нужно взаимодействовать с каждым элементом, вы делаете другую пару индексов, чтобы пройти каждую позицию внутри шага - но я думаю, что вы поняли.
Помимо использования внутренних числовых операций, подобных этому «любому» использованию, вы, безусловно, можете добавить некоторый код потока управления, чтобы разорвать цикл (b, a), когда найден первый соответствующий пиксель.
(Например, вставка оператора "break" внутри вашего последнего "if" и другой пары if..break для цикла "b".
Я действительно не могу точно выяснить, каково ваше намерение - поэтому я не могу дать вам более подробный код.