欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python 實現(xiàn)元胞自動機中的生命游戲(Game of life)

 更新時間:2018年01月27日 09:34:34   作者:農(nóng)大魯迅  
本篇文章主要介紹了詳解Python 實現(xiàn)元胞自動機中的生命游戲(Game of life),具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介

細(xì)胞自動機(又稱元胞自動機),名字雖然很深奧,但是它的行為卻是非常美妙的。所有這些怎樣實現(xiàn)的呢?我們可以把計算機中的宇宙想象成是一堆方格子構(gòu)成的封閉空間,尺寸為N的空間就有NN個格子。而每一個格子都可以看成是一個生命體,每個生命都有生和死兩種狀態(tài),如果該格子生就顯示藍(lán)色,死則顯示白色。每一個格子旁邊都有鄰居格子存在,如果我們把33的9個格子構(gòu)成的正方形看成一個基本單位的話,那么這個正方形中心的格子的鄰居就是它旁邊的8個格子。

每個格子的生死遵循下面的原則:

1. 如果一個細(xì)胞周圍有3個細(xì)胞為生(一個細(xì)胞周圍共有8個細(xì)胞),則該細(xì)胞為生(即該細(xì)胞若原先為死,則轉(zhuǎn)為生,若原先為生,則保持不變) 。

2. 如果一個細(xì)胞周圍有2個細(xì)胞為生,則該細(xì)胞的生死狀態(tài)保持不變;

3. 在其它情況下,該細(xì)胞為死(即該細(xì)胞若原先為生,則轉(zhuǎn)為死,若原先為死,則保持不變)

設(shè)定圖像中每個像素的初始狀態(tài)后依據(jù)上述的游戲規(guī)則演繹生命的變化,由于初始狀態(tài)和迭代次數(shù)不同,將會得到令人嘆服的優(yōu)美圖案。

代碼

"""
元胞自動機 Python 實現(xiàn)
"""
import numpy as np
import matplotlib.pyplot as plt


class GameOfLife(object):

  def __init__(self, cells_shape):
    """
    Parameters
    ----------
    cells_shape : 一個元組,表示畫布的大小。

    Examples
    --------
    建立一個高20,寬30的畫布
    game = GameOfLife((20, 30))
    
    """

    # 矩陣的四周不參與運算
    self.cells = np.zeros(cells_shape)

    real_width = cells_shape[0] - 2
    real_height = cells_shape[1] - 2
    
    self.cells[1:-1, 1:-1] = np.random.randint(2, size=(real_width, real_height))
    self.timer = 0
    self.mask = np.ones(9)
    self.mask[4] = 0
  
  def update_state(self):
    """更新一次狀態(tài)"""
    buf = np.zeros(self.cells.shape)
    cells = self.cells
    for i in range(1, cells.shape[0] - 1):
      for j in range(1, cells.shape[0] - 1):
        # 計算該細(xì)胞周圍的存活細(xì)胞數(shù)
        neighbor = cells[i-1:i+2, j-1:j+2].reshape((-1, ))
        neighbor_num = np.convolve(self.mask, neighbor, 'valid')[0]
        if neighbor_num == 3:
          buf[i, j] = 1
        elif neighbor_num == 2:
          buf[i, j] = cells[i, j]
        else:
          buf[i, j] = 0
    self.cells = buf
    self.timer += 1
  
  def plot_state(self):
    """畫出當(dāng)前的狀態(tài)"""
    plt.title('Iter :{}'.format(self.timer))
    plt.imshow(self.cells)
    plt.show()

  def update_and_plot(self, n_iter):
    """更新狀態(tài)并畫圖
    Parameters
    ----------
    n_iter : 更新的輪數(shù)
    """
    plt.ion()
    for _ in range(n_iter):
      plt.title('Iter :{}'.format(self.timer))
      plt.imshow(self.cells)
      self.update_state()
      plt.pause(0.2)
    plt.ioff()
          

if __name__ == '__main__':
  game = GameOfLife(cells_shape=(60, 60))
  game.update_and_plot(200)

效果圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python if語句知識點用法總結(jié)

    Python if語句知識點用法總結(jié)

    本篇文章給python初學(xué)者總結(jié)了關(guān)于Python之if語句的相關(guān)用法以及知識點總結(jié),跟著學(xué)習(xí)下吧。
    2018-06-06
  • Python 3.x對.CSV數(shù)據(jù)按任意行、列讀取的過程

    Python 3.x對.CSV數(shù)據(jù)按任意行、列讀取的過程

    這篇文章主要介紹了Python 3.x對.CSV數(shù)據(jù)按任意行、列讀取的過程,具有很好的參考價值,希望對大家有所幫助。
    2022-05-05
  • 淺談Keras中shuffle和validation_split的順序

    淺談Keras中shuffle和validation_split的順序

    這篇文章主要介紹了淺談Keras中shuffle和validation_split的順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • matplotlib畫混淆矩陣與正確率曲線的實例代碼

    matplotlib畫混淆矩陣與正確率曲線的實例代碼

    混淆矩陣也稱誤差矩陣,是表示精度評價的一種標(biāo)準(zhǔn)格式,下面這篇文章主要給大家介紹了關(guān)于matplotlib畫混淆矩陣與正確率曲線的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 使用PyTorch訓(xùn)練一個圖像分類器實例

    使用PyTorch訓(xùn)練一個圖像分類器實例

    今天小編就為大家分享一篇使用PyTorch訓(xùn)練一個圖像分類器實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 使用python的chardet庫獲得文件編碼并修改編碼

    使用python的chardet庫獲得文件編碼并修改編碼

    windows和linux采用了不同的編碼,這讓很多人傷透了腦經(jīng),這里我采用了Python的chardet庫獲得代碼的編碼,然后修改編碼
    2014-01-01
  • Python元組知識點總結(jié)

    Python元組知識點總結(jié)

    在本篇文章里小編給大家分享了關(guān)于Python元組的相關(guān)知識點內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-02-02
  • 利用python庫matplotlib繪制不同的圖表

    利用python庫matplotlib繪制不同的圖表

    這篇文章主要介紹了利用python庫matplotlib繪制不同的圖表,使用python中的matplotlib繪制圖表,主要分享繪制簡單的曲線圖、單條曲線圖、多條曲線圖、直方圖以及散點圖的思路和用法,需要的朋友可以參考一下
    2022-03-03
  • Python基于回溯法子集樹模板解決0-1背包問題實例

    Python基于回溯法子集樹模板解決0-1背包問題實例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決0-1背包問題,簡單描述了0-1背包問題并結(jié)合具體實例形式分析了Python使用回溯法子集樹模板解決0-背包問題的具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • 淺談Python的異常處理

    淺談Python的異常處理

    這篇文章主要介紹了淺談Python的異常處理的相關(guān)資料,需要的朋友可以參考下
    2016-06-06

最新評論