Вот несколько строк из этого упрощенного примера:
Код: Выделить всё
for j in range(nper):
phi2 = 0.25*(np.roll(phi, 1, axis=0) +
np.roll(phi, -1, axis=0) +
np.roll(phi, 1, axis=1) +
np.roll(phi, -1, axis=1) )
phi[do_me] = phi2[do_me]
На самом деле это наиболее эффективно для массивов размером от [100,100] до [300,300] на моем ноутбуке. Возможные проблемы с кэшированием выше этого.
Может ли scipy.ndimage.interpolation.shift() работать лучше, как это реализовано здесь, и если да, то исправлено ли это? В приведенном выше примере я все равно выбрасываю обернутые части, но, возможно, не всегда.
примечание: в этом вопросе я ищу только то, что доступно в NumPy/SciPy. Конечно, есть много хороших способов ускорить Python и даже NumPy, но это не то, что я ищу здесь, потому что Я действительно пытаюсь лучше понять NumPy.