Вам не понадобится петля вообще.Предполагая, что v
, vnew
и unchangeableflag
являются массивами 1-го порядка с size*size
записями, вы можете сделать
v = v.reshape(size, size)
vnew = vnew.reshape(size, size)
unchangeableflag = unchangeableflag.reshape(size, size)
average = v[1:-1, 2:]
average += v[1:-1, :-2]
average += v[2:, 1:-1]
average += v[-2:, 1:-1]
average /= 4.0
vnew[1:-1, 1:-1][unchangeableflag[1:-1, 1:-1] == 0] = average
Но чего вы на самом деле пытаетесь достичь?Это выглядит подозрительно, как если бы вы могли сойтись с некоторым применением дискретного лапласиана.
(Обратите внимание, что это предполагает, что v
содержит числа с плавающей запятой. Если dtype
для `v´ является симметричным типом,вам нужно небольшое изменение.)