最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python 實(shí)現(xiàn)元胞自動(dòng)機(jī)中的生命游戲(Game of life)

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

簡(jiǎn)介

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

每個(gè)格子的生死遵循下面的原則:

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

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

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

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

代碼

"""
元胞自動(dòng)機(jī) Python 實(shí)現(xiàn)
"""
import numpy as np
import matplotlib.pyplot as plt


class GameOfLife(object):

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

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

    # 矩陣的四周不參與運(yùn)算
    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):
        # 計(jì)算該細(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)

效果圖

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

相關(guān)文章

  • Python簡(jiǎn)單獲取網(wǎng)卡名稱及其IP地址的方法【基于psutil模塊】

    Python簡(jiǎn)單獲取網(wǎng)卡名稱及其IP地址的方法【基于psutil模塊】

    這篇文章主要介紹了Python簡(jiǎn)單獲取網(wǎng)卡名稱及其IP地址的方法,結(jié)合實(shí)例形式分析了Python基于psutil模塊針對(duì)本機(jī)網(wǎng)卡硬件信息的讀取操作簡(jiǎn)單使用技巧,需要的朋友可以參考下
    2018-05-05
  • python之PyAutoGui教你做個(gè)自動(dòng)腳本計(jì)算器的方法

    python之PyAutoGui教你做個(gè)自動(dòng)腳本計(jì)算器的方法

    這篇文章主要介紹了python之PyAutoGui教你做個(gè)自動(dòng)腳本計(jì)算器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python中的itertools的使用詳解

    python中的itertools的使用詳解

    這篇文章主要介紹了python中的itertools的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 在jupyter notebook中使用pytorch的方法

    在jupyter notebook中使用pytorch的方法

    這篇文章主要介紹了在jupyter notebook中使用pytorch的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 在tensorflow中實(shí)現(xiàn)屏蔽輸出的log信息

    在tensorflow中實(shí)現(xiàn)屏蔽輸出的log信息

    今天小編就為大家分享一篇在tensorflow中實(shí)現(xiàn)屏蔽輸出的log信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python操作mongodb數(shù)據(jù)庫的方法詳解

    Python操作mongodb數(shù)據(jù)庫的方法詳解

    這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python下載、安裝pymongo及操作MongoDB數(shù)據(jù)庫相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-12-12
  • Python 如何讀取.txt,.md等文本文件

    Python 如何讀取.txt,.md等文本文件

    這篇文章主要介紹了Python 讀取.txt,.md等文本文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • PyTorch中的nn.ConvTranspose2d模塊詳解

    PyTorch中的nn.ConvTranspose2d模塊詳解

    nn.ConvTranspose2d是PyTorch中用于實(shí)現(xiàn)二維轉(zhuǎn)置卷積的模塊,廣泛應(yīng)用于生成對(duì)抗網(wǎng)絡(luò)(GANs)和卷積神經(jīng)網(wǎng)絡(luò)(CNNs)的解碼器中。該模塊通過參數(shù)如輸入輸出通道數(shù)、卷積核大小、步長(zhǎng)、填充等,能控制輸出尺寸和避免棋盤效應(yīng)
    2024-09-09
  • Python數(shù)據(jù)分析:手把手教你用Pandas生成可視化圖表的教程

    Python數(shù)據(jù)分析:手把手教你用Pandas生成可視化圖表的教程

    今天小編就為大家分享一篇Python數(shù)據(jù)分析:手把手教你用Pandas生成可視化圖表的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 解決Python安裝時(shí)報(bào)缺少DLL問題【兩種解決方法】

    解決Python安裝時(shí)報(bào)缺少DLL問題【兩種解決方法】

    這篇文章主要介紹了解決Python安裝時(shí)報(bào)缺少DLL問題,本文通過兩種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

缙云县| 尚义县| 柯坪县| 应城市| 棋牌| 托克托县| 罗定市| 昌都县| 福贡县| 荣昌县| 荔浦县| 泗阳县| 原平市| 荔波县| 安阳市| 高尔夫| 博白县| 霍邱县| 南皮县| 洛隆县| 赣榆县| 尼木县| 孟津县| 高陵县| 睢宁县| 拉萨市| 无极县| 东丰县| 慈利县| 赤峰市| 邵阳县| 江华| 平顶山市| 台湾省| 武川县| 青州市| 会同县| 新和县| 景宁| 右玉县| 中牟县|