日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何基于Python Matplotlib實現網格動畫

瀏覽:221日期:2022-07-16 17:59:57

—1—

如果你對本文的代碼感興趣,可以去 Github (文末提供)里查看。第一次運行的時候會報一個錯誤(還沒找到解決辦法),不過只要再運行一次就正常了。

這篇文章雖然不是篇典型的數據科學類文章,不過它涉及到數據科學以及商業智能的應用。Python 的 Matplotlib 是最常用的圖表繪制以及數據可視化庫。我們對折線圖、柱狀圖以及熱力圖都比較熟悉,但你知道用 Matplotlib 還能做簡單的動畫嗎?

下面就是用 Matplotlib 制作動畫的例子。展示的是 John Conway 的 《The Game of Life》,這是一個 Metis(數據科學夏令營)中的編程挑戰題目,同時給了我一個機會來制作我的第一個 Python 動畫。看看結果的動圖:

如何基于Python Matplotlib實現網格動畫

這篇文章的重點還是主要放在 python 中如何用 Matploylib 制作動畫。

但如果你不太熟悉模擬游戲的話(它更像是可以看的模擬動畫,而非可以玩的游戲),我來給大家介紹一下規則:

一開始先設置一個 N×N 的網格(我的動畫中用的是 50×50 ); 接著隨機地向格子中填充“小細胞”(一開始隨機地從 2500 個格子中選取 1500 個進行填充); 如果鄰居小細胞少于等于 1 個,那格子中的小細胞會死掉; 如果鄰居大于等于 4 個的也會死掉; 只有 2 個或 3 個鄰居時可以生存; 空的格子中如果正好有 3 個鄰居,則會長出 1 個新的“小細胞”;

—2—

建立網格

我們首先導入所需的庫。

import timefrom IPython import displayimport matplotlib.pyplot as pltimport matplotlib.animation as animation

我們會利用Matploylib 動畫模塊中的 FuncAnimation() 函數。 FuncAnimation()是通過多次調用一個函數并逐次更新圖片來實現讓圖片動起來的。我們來一步步地實現這個過程。

但首先,我們需要先初始化我們的網格。下面的幾行代碼用來存儲我們輸入的數據:

我們需要一個 50×50 大小的網格; pad 變量可以使得計算鄰居變得更容易。通過在邊界外添加一層空白格子,我們就不需要額外再寫一個邏輯來處理網格的邊界。因此我們 50×50 的網格其實是被一圈空白格子包圍著,這使得實際的 numpy 序列的大小為 52×52; initial_cels 變量表示在網格啟動的時候我們想要多少“小細胞”。他們會被隨機地分布在網格上。

# Input variables for the boardboardsize = 50 # board will be X by X where X = boardsizepad = 2# padded border, do not change this!initial_cells = 1500 # this number of initial cells will be placed # in randomly generated positions

接下來我們隨機地生成一系列“小細胞”的初始坐標(上面我們選擇了 1500 個)。把這些坐標存儲在 pos_list 變量中。

# Get a list of random coordinates so that we can initialize# board with randomly placed organismspos_list = []for i in range(initial_cells): pos_list.append([random.randint(1, boardsize), random.randint(1, boardsize)])

然后我們是時候該初始化網格了。我們會用一組叫 my_board 的 numpy 序列來代表我們的網格——我們先生成一個 52×52 數值為 0 的矩陣序列作為開始(比 50×50 大是由于增加了空白邊緣),然后調用 init_board() 函數來根據 pos_list 中的坐標把“小細胞”填充到網格中。輔助函數的具體細節我不再展開講了,不過我把他們都整理到我的 Github 上了。

# Initialize the boardmy_board = np.zeros((boardsize+pad, boardsize+pad))my_board = init_board(pos_list, my_board)

—3—

制作網格動畫

這是我們最期待的部分——動畫!首先,我們需要完善一些配置。下面的幾行代碼用來生成展示我們動畫的 mtplotlib 圖框。

# Required line for plotting the animation%matplotlib notebook# Initialize the plot of the board that will be used for animationfig = plt.gcf()

接下來制作我們的第一幀。 mtplotlib 中的 imshow() 函數可以接收一組 numpy 矩陣然后返回一張圖片。很酷吧!

# Show first image - which is the initial boardim = plt.imshow(my_board)plt.show()

傳入 imshow() 的變量是我們的初始的網格 my_board。生成的圖片長這樣:

如何基于Python Matplotlib實現網格動畫

現在我們需要寫一個可以給 FuncAnimation() 調用的輔助函數。 animate() 函數接受一幀畫面作為輸入充當計數器。這個畫面計數器就是 FuncAnimation() 和 animate() 函數溝通的橋梁——在每一個時間點(也就是每一幀),它都會調用一次 animate()。然后 animate() 會逐次使用輔助函數 update_board() 來對網格進行迭代。最后, set_data() 函數將圖片更新為迭代后的網格,這就完成了。

# Helper function that updates the board and returns a new image of# the updated board animate is the function that FuncAnimation callsdef animate(frame): im.set_data(update_board(my_board)) return im,

一切順利!我們準備調用 FuncAnimation() 函數了。注意輸入的參數:

fig 是我們在前面創建的用來裝載我們的動畫的圖形變量; animate 是 FuncAnimation() 用畫面計數器進行溝通的函數(自動傳入,不需要特別聲明) frames 表示我們希望動畫持續多少幀,在這里我們想要動畫的長度為 200 幀; interval 表示每一幀之間間隔的毫秒數。我們想要每幀之間間隔 50 毫秒。

# This line creates the animationanim = animation.FuncAnimation(fig, animate, frames=200,interval=50)

就這么簡單!不是很難吧?為了慶祝我們成功制作動畫,我再送大家一個動畫:

如何基于Python Matplotlib實現網格動畫

—4—

總結

希望這篇文章能幫到大家。在結束之前,讓我來幫助大家腦補更多我們今天學到的動畫功能在數據科學上的應用:

一個個地畫出蒙特卡洛模擬數據,你能觀察到最終的分布是如何逐步形成的; 按順序遍歷時間序列數據,可以描繪你的模型或數據在新的觀察角度下有什么表現; 當你改變輸入參數時,比如族群數,可以展現你的算法是如何劃分族群的; 根據時間或不同的數據子集生成關聯熱力圖,用于觀察不同的樣本是如何影響你的模型的預期參數的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美二区| 日韩精品专区| 日韩欧美精品| 国产成人精品亚洲日本在线观看| 国产成人精品一区二区三区视频| 蜜臀av国产精品久久久久| 亚洲免费婷婷| 亚洲精品极品| 国产韩日影视精品| 国产亚洲一区在线| 亚洲一二av| 青青草视频一区| 你懂的国产精品| 色在线视频观看| 91超碰国产精品| 一区二区国产在线观看| 久久国产麻豆精品| 天堂av在线| 在线综合亚洲| 国产欧美一区二区精品久久久 | 麻豆精品蜜桃视频网站| 国产一区丝袜| 91超碰国产精品| 91麻豆精品激情在线观看最新| 久久伊人亚洲| 99香蕉国产精品偷在线观看 | 蜜桃av一区二区三区电影| 波多野结衣一区| 日本成人精品| 精品国产麻豆| 国产视频一区在线观看一区免费| 亚州精品视频| 色一区二区三区| 久久亚洲国产精品一区二区| 国产剧情一区二区在线观看| 久久久夜精品| 亚洲精品福利| 亚洲成人一区在线观看| 日韩激情精品| 国产一区清纯| 国产精品视频一区二区三区综合 | 偷拍精品精品一区二区三区| 蜜桃av一区| 日韩欧美中文| 综合精品一区| 精品日韩视频| 91精品麻豆| 美女毛片一区二区三区四区| 久久国内精品自在自线400部| 亚洲国产一区二区在线观看| 国产精品一区高清| 国产精品99免费看| 麻豆精品久久久| 首页欧美精品中文字幕| 国产精品99久久精品| 奇米亚洲欧美| 日韩不卡免费高清视频| 欧美三级第一页| 亚洲一级在线| 国产91精品对白在线播放| 国产精品美女在线观看直播| 99国产精品久久久久久久| 91免费精品| 国产精东传媒成人av电影| 亚洲尤物av| 久久www成人_看片免费不卡| 桃色一区二区| 精品国产精品国产偷麻豆| 日韩精品一区二区三区中文字幕| 久久人人99| 国产欧美一区二区三区精品酒店| 精品国产乱码| 国产欧美日韩精品一区二区三区| 视频一区中文字幕| 五月天激情综合网| 激情亚洲影院在线观看| 在线精品小视频| 国产91精品对白在线播放| 伊伊综合在线| 国产欧美一区二区三区精品酒店| 国产精品极品| 亚洲欧洲免费| 午夜在线播放视频欧美| 免费av一区二区三区四区| 香蕉视频亚洲一级| 激情国产在线| 欧美激情麻豆| 美女高潮久久久| 国产毛片久久久| 亚洲青青久久| 99国产精品自拍| 蜜桃久久av| 久久亚洲图片| 亚洲另类黄色| 午夜久久av| 日韩精品免费视频一区二区三区 | 精品久久网站| 都市激情国产精品| 性色一区二区| 久久精品国产68国产精品亚洲| 日韩在线视频精品| 日韩av首页| 精品中文字幕一区二区三区av| 欧美 日韩 国产一区二区在线视频| 91精品亚洲| 一区久久精品| 亚洲精品欧洲| 国产日韩欧美中文在线| 国产精品一级在线观看| 国产黄色精品| 国产suv精品一区| 91精品韩国| 亚洲视频www| 日韩欧美激情电影| 97精品国产99久久久久久免费| 国产欧美日韩影院| 国产一区二区三区久久| 久久国产主播| 久久亚洲二区| 国产情侣一区在线| 精品三区视频| 91精品亚洲| 蘑菇福利视频一区播放| 日本一区免费网站| 欧美黄色精品| 免费不卡中文字幕在线| 国产精品1区| 亚洲第一精品影视| 综合亚洲自拍| 免费亚洲婷婷| 精品中文一区| 国产精品videossex| 欧美精品日日操| 亚洲精品观看| 视频福利一区| 日韩福利视频网| 麻豆视频在线观看免费网站黄| 久久蜜桃精品| 日韩成人av影视| 桃色一区二区| 欧美日韩99| 欧美亚洲在线日韩| 欧美日韩国产一区二区在线观看| 神马久久午夜| 免费国产亚洲视频| 国产一区二区三区四区五区 | 国产精品自拍区| 欧美+日本+国产+在线a∨观看| 欧美一区二区三区久久| 日本精品在线中文字幕| 日韩成人一级| 亚洲精品99| 麻豆国产欧美一区二区三区 | 日本精品不卡| 青青草国产精品亚洲专区无| 欧美午夜精品一区二区三区电影| 欧美一区在线观看视频| 国产一区观看| 精品国产乱码久久久久久樱花 | 欧美日韩国产在线观看网站 | 丝袜a∨在线一区二区三区不卡| 久久精品人人| 亚洲人成高清| 亚洲福利精品| 国产精品美女午夜爽爽| 久久不射网站| 久久精品国产99久久| 美女精品久久| 日韩精品一区二区三区中文在线| 99精品视频在线| 精品国产午夜肉伦伦影院| 日韩在线黄色| 99国产精品| 激情综合亚洲| 国产欧洲在线| 欧美精品中文| 亚洲日本国产| 在线视频精品| 国产拍在线视频| 欧美片网站免费| 蜜臀a∨国产成人精品| 免费av一区| 欧美不卡视频| 国户精品久久久久久久久久久不卡 | 美女久久一区| 国产美女精品视频免费播放软件| 国产亚洲一区二区三区不卡| 亚洲人成亚洲精品| 国产在线一区不卡| 男女激情视频一区| 久久理论电影| 亚洲一区日本| 亚洲一区二区网站| 视频一区视频二区中文| 91亚洲精品在看在线观看高清| 欧美一区自拍| 99pao成人国产永久免费视频| 综合激情网...| 日本成人中文字幕| 久久久免费人体|