
TI/Skrypty z zajęć/7: Różnice pomiędzy wersjami
Z Brain-wiki
|  (Utworzono nową stronę "<source lang="python"> </source>") | |||
| Linia 1: | Linia 1: | ||
| <source lang="python"> | <source lang="python"> | ||
| + | # -*- coding: utf-8 -*- | ||
| + | import numpy as np | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | ''' | ||
| + | • Żywa komórka, która ma mniej niż dwóch żywych sąsiadów umiera z „osamotnienia” | ||
| + | • Żywa komórka, która ma dwóch lub trzech żywych sąsiadów pozostaje żywa | ||
| + | • Żywa komórka, która ma więcej niż trzech żywych sąsiadów umiera z „przeludnienia” | ||
| + | • Każda martwa komórka z dokładnie trzema żywymi sąsiadami staje się żywa poprzez „reprodukcję” | ||
| + | ''' | ||
| + | R = np.array([[0,0,0,0,0],[0,0,1,1,0],[0,1,1,0,0],[0,0,1,0,0],[0,0,0,0,0]]) | ||
| + | #R = np.array([[0,0,0,0,0],[0,0,0,0,0],[0,1,1,1,0],[0,0,0,0,0],[0,0,0,0,0]]) | ||
| + | |||
| + | |||
| + | def step_a(a): | ||
| + |     result = np.zeros(a.shape) | ||
| + |     for x in range(a.shape[0]): | ||
| + |         for y in range(a.shape[1]): | ||
| + |             #liczenie sasiadow | ||
| + |             nei = np.sum(a[max(x-1,0):x+2,max(y-1,0):y+2])-a[x,y] | ||
| + |             if nei==3: result[x,y] = 1 | ||
| + |             if nei==2: result[x,y] = a[x,y] | ||
| + |     return result | ||
| + | |||
| + | def step_b(a): | ||
| + |     result = np.zeros(a.shape) | ||
| + |     temp = np.zeros((a.shape[0]+2,a.shape[1]+2)) | ||
| + |     temp[1:-1,1:-1] = a | ||
| + |     for x in range(a.shape[0]): | ||
| + |         for y in range(a.shape[1]): | ||
| + |             #liczenie sasiadow | ||
| + |             nei = np.sum(temp[x:x+3,y:y+3])-temp[x+1,y+1] | ||
| + |             if nei==3: result[x,y] = 1 | ||
| + |             if nei==2: result[x,y] = a[x,y] | ||
| + |     return result | ||
| + | |||
| + | def step_c(a): | ||
| + |     neib = [(-1,-1),(-1,0),(-1,1),(1,-1),(1,0),(1,1),(0,-1),(0,1)] | ||
| + |     temp = np.zeros((a.shape[0]+2,a.shape[1]+2)) | ||
| + |     temp[1:-1,1:-1] = a | ||
| + | |||
| + |     result = np.zeros(a.shape) | ||
| + |     for x in range(a.shape[0]): | ||
| + |         for y in range(a.shape[1]): | ||
| + |             #liczenie sasiadow | ||
| + |             nei = np.sum([temp[1+x+xx,1+y+yy] for xx,yy in neib]) | ||
| + |             if nei==3: result[x,y] = 1 | ||
| + |             if nei==2: result[x,y] = a[x,y] | ||
| + |     return result | ||
| + | |||
| + | |||
| + | for n in  range(15): | ||
| + |     plt.imshow(R, cmap="Greys") | ||
| + |     plt.show() | ||
| + |     R = step_c(R) | ||
| + | |||
| + | |||
| + | |||
| </source> | </source> | ||
Aktualna wersja na dzień 13:40, 15 kwi 2020
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
'''
• Żywa komórka, która ma mniej niż dwóch żywych sąsiadów umiera z „osamotnienia”
• Żywa komórka, która ma dwóch lub trzech żywych sąsiadów pozostaje żywa
• Żywa komórka, która ma więcej niż trzech żywych sąsiadów umiera z „przeludnienia”
• Każda martwa komórka z dokładnie trzema żywymi sąsiadami staje się żywa poprzez „reprodukcję”
'''
R = np.array([[0,0,0,0,0],[0,0,1,1,0],[0,1,1,0,0],[0,0,1,0,0],[0,0,0,0,0]])
#R = np.array([[0,0,0,0,0],[0,0,0,0,0],[0,1,1,1,0],[0,0,0,0,0],[0,0,0,0,0]])
def step_a(a):
    result = np.zeros(a.shape)
    for x in range(a.shape[0]):
        for y in range(a.shape[1]):
            #liczenie sasiadow
            nei = np.sum(a[max(x-1,0):x+2,max(y-1,0):y+2])-a[x,y]
            if nei==3: result[x,y] = 1
            if nei==2: result[x,y] = a[x,y]
    return result
def step_b(a):
    result = np.zeros(a.shape)
    temp = np.zeros((a.shape[0]+2,a.shape[1]+2))
    temp[1:-1,1:-1] = a
    for x in range(a.shape[0]):
        for y in range(a.shape[1]):
            #liczenie sasiadow
            nei = np.sum(temp[x:x+3,y:y+3])-temp[x+1,y+1]
            if nei==3: result[x,y] = 1
            if nei==2: result[x,y] = a[x,y]
    return result
def step_c(a):
    neib = [(-1,-1),(-1,0),(-1,1),(1,-1),(1,0),(1,1),(0,-1),(0,1)]
    temp = np.zeros((a.shape[0]+2,a.shape[1]+2))
    temp[1:-1,1:-1] = a
    result = np.zeros(a.shape)
    for x in range(a.shape[0]):
        for y in range(a.shape[1]):
            #liczenie sasiadow
            nei = np.sum([temp[1+x+xx,1+y+yy] for xx,yy in neib])
            if nei==3: result[x,y] = 1
            if nei==2: result[x,y] = a[x,y]
    return result
for n in  range(15):
    plt.imshow(R, cmap="Greys")
    plt.show()
    R = step_c(R)

