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

您的位置:首頁技術(shù)文章
文章詳情頁

如何基于Python Matplotlib實(shí)現(xiàn)網(wǎng)格動畫

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

—1—

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

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

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

如何基于Python Matplotlib實(shí)現(xiàn)網(wǎng)格動畫

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

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

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

—2—

建立網(wǎng)格

我們首先導(dǎo)入所需的庫。

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

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

但首先,我們需要先初始化我們的網(wǎng)格。下面的幾行代碼用來存儲我們輸入的數(shù)據(jù):

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

# 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

接下來我們隨機(jī)地生成一系列“小細(xì)胞”的初始坐標(biāo)(上面我們選擇了 1500 個(gè))。把這些坐標(biāo)存儲在 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)])

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

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

—3—

制作網(wǎng)格動畫

這是我們最期待的部分——動畫!首先,我們需要完善一些配置。下面的幾行代碼用來生成展示我們動畫的 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() 函數(shù)可以接收一組 numpy 矩陣然后返回一張圖片。很酷吧!

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

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

如何基于Python Matplotlib實(shí)現(xiàn)網(wǎng)格動畫

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

# 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,

一切順利!我們準(zhǔn)備調(diào)用 FuncAnimation() 函數(shù)了。注意輸入的參數(shù):

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

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

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

如何基于Python Matplotlib實(shí)現(xiàn)網(wǎng)格動畫

—4—

總結(jié)

希望這篇文章能幫到大家。在結(jié)束之前,讓我來幫助大家腦補(bǔ)更多我們今天學(xué)到的動畫功能在數(shù)據(jù)科學(xué)上的應(yīng)用:

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日本精品| 9999国产精品| 精精国产xxxx视频在线播放| 欧美激情视频一区二区三区免费| 久久久久国产精品一区三寸 | 黄在线观看免费网站ktv| 欧美精品影院| 清纯唯美亚洲综合一区| 日本视频在线一区| 人人爱人人干婷婷丁香亚洲| 日本成人中文字幕| 国产伦精品一区二区三区视频| 精品视频自拍| 免费看久久久| 麻豆国产精品| 国产999精品在线观看| 成人一区而且| 蜜桃视频在线网站| 国产麻豆久久| 尤物精品在线| 视频一区中文字幕精品| 国产日韩在线观看视频| 国产精品片aa在线观看| 精品国产欧美日韩| 国产99亚洲| 中文欧美日韩| 日韩高清三区| 国内自拍视频一区二区三区| 快播电影网址老女人久久| 亚洲国产成人精品女人| 亚洲综合中文| 国产精品嫩草影院在线看| 久久亚洲精精品中文字幕| 中文字幕人成乱码在线观看| 欧美.日韩.国产.一区.二区 | 亚洲香蕉久久| 日韩精品一级| 老牛国内精品亚洲成av人片| 美女av在线免费看| 99国产一区| 91欧美极品| 国产成人1区| 久热精品在线| 精品亚洲二区| 一本色道精品久久一区二区三区| 久久亚州av| 日韩中文字幕高清在线观看| 精品中文字幕一区二区三区av| 久久精品亚洲| 国产66精品| 蜜臀91精品国产高清在线观看| 黑人精品一区| 日韩午夜精品| 久久在线91| 夜久久久久久| 老鸭窝一区二区久久精品| 麻豆精品蜜桃| 日本午夜精品一区二区三区电影| 羞羞答答国产精品www一本| 视频一区日韩| 日韩电影在线视频| 亚洲婷婷丁香| 国产精品成人a在线观看| 不卡在线一区| 久久狠狠久久| 欧美日韩视频| 精品国产乱码久久久| 视频一区视频二区在线观看| 成人免费一区| 涩涩涩久久久成人精品| 在线看片国产福利你懂的| 综合日韩在线| 久久久成人网| 国产精品一区免费在线| 在线国产一区二区| 久久av超碰| 日韩一区欧美二区| 夜鲁夜鲁夜鲁视频在线播放| 日韩国产91| 99久久精品网| 国产精品黄网站| 蜜桃av一区二区三区电影| 97se综合| 国产精品第一国产精品| 久久av一区| 久久精品青草| 麻豆久久久久久| 亚洲精品高潮| 在线亚洲一区| 欧洲亚洲一区二区三区| 免费在线日韩av| 日本国产一区| 在线精品视频一区| 91精品久久久久久久久久不卡| 国产在线观看www| 久久亚洲图片| 91精品国产乱码久久久久久久| 欧美.日韩.国产.一区.二区| 国产精品视频一区二区三区综合| 国产精品大片| 中文精品电影| 五月综合激情| 久久九九电影| 日韩一区自拍| 精品国产网站| 国产激情综合| 91麻豆精品| 日本中文字幕不卡| 一级欧美视频| 久久国产福利| 亚洲欧美久久久| 久久国产电影| 神马午夜在线视频| 亚洲精品成人图区| 国产成人精品一区二区免费看京| 91精品福利| 美女网站视频一区| 日韩理论片av| 欧美日韩在线观看首页| 久久一区国产| 国产经典一区| 国产精品日韩精品在线播放| 欧美精品国产一区| 国产欧美在线| 欧美日韩午夜| 国产亚洲欧美日韩精品一区二区三区| 成人在线视频区| 蜜桃久久久久| 久久精品二区亚洲w码| 精品国产美女a久久9999| 久久99性xxx老妇胖精品| 国产精品成人国产| 精品久久在线| 中文字幕在线视频久| 日韩成人三级| 久久视频国产| 婷婷激情图片久久| 亚洲一区免费| 亚洲毛片一区| 日韩 欧美一区二区三区| 日韩精品五月天| 欧美三区不卡| 成人在线视频免费| 99精品美女| 99视频一区| 99国产精品久久久久久久| 亚洲欧美日韩视频二区| 日韩区欧美区| 欧美国产不卡| 日韩免费小视频| 午夜久久美女| 日本在线成人| 久久中文欧美| 91精品蜜臀一区二区三区在线| 97精品资源在线观看| 日韩精品高清不卡| 精品中国亚洲| 91视频久久| 国产在线欧美| 一区二区国产在线观看| 国产精品久久久久毛片大屁完整版| 九一精品国产| 丝袜美腿亚洲色图| 日韩一区中文| 老色鬼精品视频在线观看播放| 亚洲精品少妇| 欧美日韩一区自拍| av中文字幕在线观看第一页| 99久久久国产精品美女| 亚洲欧美日韩精品一区二区| 欧美日韩a区| 黄色在线观看www| 日韩亚洲国产欧美| 久久精品99久久久| 亚洲播播91| 免费视频最近日韩| 精品一二三区| 亚洲精品1区| 国产精品www.| 免费久久久久久久久| 日本午夜精品视频在线观看| 亚洲国产欧美日本视频| 蜜臀精品久久久久久蜜臀| 免费一级欧美片在线观看网站| 免费成人在线影院| 日韩高清不卡一区| 国产成人在线中文字幕| 美女久久久久| 国产日韩一区二区三区在线| 成人在线网站| 日韩**一区毛片| 精品亚洲美女网站| 石原莉奈在线亚洲二区| 久久一区视频| 爽好久久久欧美精品| 国产成人精品亚洲线观看 | 精品国产乱码久久久| 久久国产日本精品| 日韩高清一区二区| 亚洲婷婷免费|