Векторизованный и масштабируемый расчет окрестности для сотового автомата - PullRequest
0 голосов
/ 06 марта 2019

У меня есть модель CA, похожая на модель игры жизни Конвея. Однако в этом случае я хочу создать функцию, которая способна вычислять окрестности масштабируемым образом, то есть всех соседей в данном «радиусе», используя тороидальную поверхность. Мне удалось собрать подобную функцию, используя np.roll ():

def NBtorus(X, r = 1):
   #X - np.array, r - Moore neighborhood radius
   a=np.arange(-1*r, r+1)
   district=itertools.product(a, a)
   N=np.sum(np.roll(np.roll(X, pac[1], axis=0), pac[0], axis=1) for pac in district)
   return N

Это работает просто отлично. Тем не менее, я боюсь, что во всей моей симуляции главное узкое место - петля for (все остальное векторизовано). Есть ли более разумный способ для этого?

...