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)