Я пытаюсь добавить значения маленького двумерного массива («источник») в больший двумерный массив («кадр»), начиная с определенной позиции в массиве кадров («pos_x», «pos_y ").Прямо сейчас у меня есть два цикла for, добавляющих значение источника к значению кадра в каждой позиции:
for i in range(x):
for j in range(y):
frame[pos_x+i][pos_y+j] += source[i][j]
(«x» и «y» - это форма исходных массивов)
Однако массивы довольно велики (форма массива кадров: 5000x8000 и форма массива источника: 1000x5000).Таким образом, этот процесс занимает довольно много времени (около 15 секунд).
Есть ли способ ускорить этот процесс, либо через понимание списка, либо через отображение, либо еще что-нибудь?
Я пытался понять списки, как это, с несколькими утверждениями и назначениями:
frame = [[frame[pos_x+i][pos_y+j] + source[i][j] for j in range(y)] for i in range(x)]
(адаптировано из потоков: Как я могу выполнять назначения в понимании списка? и Несколько операторов в списках в Python? )
, но это занимает столько же времени, сколько и в исходных циклах for.
Другая идея состояла в том, чтобы разрешить цикл только для ненулевых значений с if source[i][j] != 0
.Но когда я попробовал это, это заняло в три раза больше времени (потенциальный подвопрос: есть идеи почему?).